通讯流程图
首先是Server端的开发及设置:
1、增加一个用户:
bin\add-user.bat
用户名密码随便,但要属于guest组
2、启动Server
standalone.bat -server-config=standalone-full.xml
3、新建Topic
jboss-cli.bat --connect jms-topic add --topic-address=jmsTopic --entries=topic/jmsTopic,java:jboss/exported/jms/topic/jmsTopic
到这里服务端已经完成了。
然后是客户端的设置:
1、Publisher
package com.neohope.jms.test; import javax.jms.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.util.Hashtable; /** * Created by Hansen */ public class TestTopicPublisher { public static void main(String[] args) throws NamingException, JMSException { final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447"); final InitialContext ctx = new InitialContext(jndiProperties); TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); TopicConnection connection = factory.createTopicConnection("user001", "user001#"); TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE); Topic topic = (Topic) ctx.lookup("jms/topic/jmsTopic"); TextMessage msg = session.createTextMessage("Topic Test Message"); TopicPublisher publisher = session.createPublisher(topic); publisher.publish(msg); session.close(); connection.close(); } }
2、Subscriber
package com.neohope.jms.test; import javax.jms.*; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import java.io.IOException; import java.util.Hashtable; /** * Created by Hansen */ public class TestTopicSubscriber { public static void main(String[] args) throws NamingException, JMSException, IOException { final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447"); final InitialContext ctx = new InitialContext(jndiProperties); TopicConnectionFactory factory = (TopicConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); TopicConnection connection = factory.createTopicConnection("user001", "user001#"); TopicSession session = connection.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE); Topic topic = (Topic) ctx.lookup("jms/topic/jmsTopic"); TopicSubscriber subscriber = session.createSubscriber(topic); subscriber.setMessageListener(new MessageListener() { public void onMessage(Message message) { try { TextMessage msg = (TextMessage) message; System.out.println("Topic message received:" + msg.getText()); } catch (JMSException e) { System.out.println(e); } } }); connection.start(); System.in.read(); session.close(); connection.close(); } }