欢迎来到之路教程(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 服务器的初始上下文对象。
  • 之后使用初始上下文对象查找主题对象。
  • 我们将再次使用初始上下文对象来查找主题连接工厂。
  • 然后使用主题连接工厂创建主题连接,因为它代表 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