欢迎来到之路教程(on itroad-com)
发布/订阅消息订阅者应用流程
接收方的大部分步骤与发送方应用程序相同,只是它将侦听消息而不是发送 JMS 消息。
package pubSub; import javax.naming.InitialContext; import javax.jms.Topic; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.TopicSession; import javax.jms.TopicSubscriber; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; public class Subscriber { public static void main(String[] args) throws Exception { // get the initial context InitialContext ctx = new InitialContext(); // lookup the topic object Topic topic = (Topic) ctx.lookup("topic/topic0"); // lookup the topic connection factory TopicConnectionFactory connFactory = (TopicConnectionFactory) ctx. lookup("topic/connectionFactory"); // create a topic connection TopicConnection topicConn = connFactory.createTopicConnection(); // create a topic session TopicSession topicSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); // create a topic subscriber TopicSubscriber topicSubscriber = topicSession.createSubscriber(topic); // start the connection topicConn.start(); // receive the message TextMessage message = (TextMessage) topicSubscriber.receive(); // print the message System.out.println("Message received: " + message.getText()); // close the topic connection topicConn.close(); } }
JMS 消息传递域分为: 点对点域和发布订阅域。
发布/订阅消息传递域是一种一对多模型,其中一个发布者通过“主题”将消息发送给所有活动的订阅者,并且他们通过主题接收消息。
发布/订阅消息发布者应用程序流程
- 首先,我们将获得 JMS 服务器的初始上下文对象。
- 之后使用初始上下文对象查找主题对象。
- 我们将再次使用初始上下文对象来查找主题连接工厂。
- 然后使用主题连接工厂创建主题连接,因为它代表 JMS 服务器的物理连接。
- 创建主题连接工厂后,我们将创建主题会话,其中第一个参数将决定会话是否被处理。但是我们将使用非事务性会话,第二个参数决定交付模式。
- 在此之后,我们将为主题对象创建一个主题发布者,然后创建一条消息。
- 然后向主题对象发送诸如“Hello”之类的消息。
- 之后关闭主题连接,当我们关闭主题连接时,它将自动关闭会话和主题发布者。
示例
package pubSub; import javax.naming.InitialContext; import javax.jms.Topic; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.TopicPublisher; import javax.jms.DeliveryMode; import javax.jms.TopicSession; import javax.jms.TopicConnection; import javax.jms.TopicConnectionFactory; public class Publisher { public static void main(String[] args) throws Exception { // get the initial context InitialContext ctx = new InitialContext(); // lookup the topic object Topic topic = (Topic) ctx.lookup("topic/topic0"); // lookup the topic connection factory TopicConnectionFactory connFactory = (TopicConnectionFactory) ctx. lookup("topic/connectionFactory"); // create a topic connection TopicConnection topicConn = connFactory.createTopicConnection(); // create a topic session TopicSession topicSession = topicConn.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); // create a topic publisher TopicPublisher topicPublisher = topicSession.createPublisher(topic); topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); // create the "Hello World" message TextMessage message = topicSession.createTextMessage(); message.setText("Hello World"); // publish the messages topicPublisher.publish(message); // print what we did System.out.println("Message published: " + message.getText()); // close the topic connection topicConn.close(); } }
日期:2020-09-17 00:09:50 来源:oir作者:oir