0%
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();
topicConnectionFactory = (TopicConnectionFactory) ctx.lookup(connecionFactoryName); topicConnection = topicConnectionFactory.createTopicConnection();
publisherSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); subscriberSession = topicConnection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
Topic chatTopic = (Topic) ctx.lookup(topicName);
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"); }
Chat chat = new Chat(args[0], args[1], args[2]);
BufferedReader cli = new BufferedReader(new InputStreamReader(System.in));
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
|