JMS学习笔记之sample app

JMS学习笔记之sample app

Sample Chat App

JNDI

java.naming.factory.initial = org.apache.activemq.jndi.ActiveMQInitialContextFactory
java.naming.provider.url = tcp://localhost:61616
java.naming.security.principal=system
java.naming.security.credentials=manager

connectionFactoryNames = TopicCF
topic.topic1 = jms.topic1

Code

public class Chat implements javax.jms.MessageListener {

private TopicPublisher topicPublisher;
private TopicSubscriber topicSubscriber;
private TopicSession publisherSession;
private TopicSession subscriberSession;
private TopicConnection topicConnection;
private TopicConnectionFactory topicConnectionFactory;

private String userName;


public Chat (String connecionFactoryName, String topicName, String userName) throws Exception {
InitialContext ctx = new InitialContext();

// look up for JMS connection factory and create connection
topicConnectionFactory = (TopicConnectionFactory) ctx.lookup(connecionFactoryName);
topicConnection = topicConnectionFactory.createTopicConnection();

// create two JMS session objects
publisherSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
subscriberSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);

// look up for JMS topic
Topic chatTopic = (Topic) ctx.lookup(topicName);


// Topic publish and subscriber
topicPublisher = publisherSession.createPublisher(chatTopic);

topicSubscriber = subscriberSession.createSubscriber(chatTopic, null, true);
topicSubscriber.setMessageListener(this);

this.userName = userName;

topicConnection.start();
}

private void writeMessage(String txt) throws JMSException {
TextMessage message = publisherSession.createTextMessage();
message.setText(this.userName + ": " + txt);
topicPublisher.publish(message);
}

@Override
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}

}

public void close() throws JMSException {
topicConnection.close();
}


public static void main(String[] args) {
try {
if (args.length!=3) {
System.out.println("Factory, topic or username missing");
}

// arg0 = topicFactory; arg1 = topic; arg2 = username
Chat chat = new Chat(args[0], args[1], args[2]);

// read from command line
BufferedReader cli = new BufferedReader(new InputStreamReader(System.in));

// loop until word "exit" is typed
while (true) {
String s = cli.readLine();
if (s.equalsIgnoreCase("exit")) {
chat.close();
System.exit(0);
} else {
chat.writeMessage(s);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

}

testing

Compile

javac -cp ../lib/javax.jms_1.1.1.jar Chat.java

Run


java -cp ../lib/javax.jms_1.1.1.jar:../lib/activemq-all-5.15.5.jar:. Chat TopicCF topic1 tom

java -cp ../lib/javax.jms_1.1.1.jar:../lib/activemq-all-5.15.5.jar:. Chat TopicCF topic1 jerry