JMS 发布/订阅消息示例

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(299)   2023-06-26 07:54:18

JMS 教程 中,您了解了 JMS 消息传递域点对点域和发布订阅域。在本例中,我们将通过一个这样的发布/订阅消息域示例。发布/订阅消息传递域是一种一对多模型,其中一个发布者通过 topic 将消息发送给所有活跃的订阅者,他们收到通过主题的消息。

Publish Subscribe JMS Messaging

发布/订阅消息发布者应用程序流程

下面给出了发送方应用程序的典型发布/订阅消息传递示例。应用程序的以下步骤是 -

  1. 首先,我们将获取 JMS 服务器的初始上下文对象。
  2. 之后使用初始上下文对象查找主题对象。
  3. 我们将再次使用初始上下文对象来查找主题连接工厂。
  4. 然后使用主题连接工厂创建主题连接,因为它代表 JMS 服务器的物理连接。
  5. 创建主题连接工厂后,我们将创建主题会话,其中第一个参数将决定会话是否被处理。但我们将使用非事务性会话,第二个参数决定交付模式。
  6. 在此之后,我们将为主题对象创建一个主题发布者,然后创建一条消息。
  7. 然后向主题对象发送“你好”等消息。
  8. 关闭主题连接后,当您关闭主题连接时,它会自动关闭会话和主题发布者。

让我们看下面的例子:

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();
    }
}

发布/订阅消息订阅者应用程序流程

接收方的大部分步骤与发送方应用程序相同 - 除了它将侦听消息而不是发送 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();
    }
}

在上面的代码中,接收方将从发送方接收消息并将其打印出来,即 Hello World。

快乐学习!!

标签2: JMS
地址:https://www.cundage.com/article/jms-publish-subscribe-message-example.html

相关阅读

在JMS 教程 中,您了解了 JMS 消息传递域点对点域和发布订阅域。在本例中,我们将通过一个这样的发布/订阅消息域示例。发布/订阅消息传递域是一种一对多模型,其中一个发布者通过 topic 将...
JMS
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
有时需要将不同的消息代理连接在一起。在 Enterprise Messaging 中,这种情况称为桥接。它可以通过 JMS 和不同的协议(如 AMQP、ActiveMQ Artemis 核心协议...
HornetQ是一个开源项目,构建多协议,可嵌入,非常高性能、集群、异步消息系统。 HornetQ 支持 JMS 1.1 API 并且还定义了自己的消息传递 API 以实现最佳性能和灵活性。 H...
Java消息系统 在本文中,我将讨论面向消息的中间件 (MOM) 以及它是如何通过 JMS 在 Enterprise Java 中实现的。此外,我将讨论适合使用 JMS 的典型用例和用于讨论消息...
Oracle 推出了一项企业服务来帮助管理爪哇 运行时和应用程序,无论是在本地还是在任何云上。 称为 Java 管理服务 (JMS) 的 Oracle 云基础设施 (OCI) 本机服务于 6 月...
HornetQ是一个开源项目,构建多协议,可嵌入,非常高性能、集群、异步消息系统。 HornetQ 支持 JMS 1.1 API 并且还定义了自己的消息传递 API 以实现最佳性能和灵活性。 H...
HornetQ是一个开源项目,构建多协议,可嵌入,非常高性能、集群、异步消息系统。到目前为止,我们已经了解了配置 hornetq 独立服务器和设置基本消息传递功能的示例。 HornetQ 具有很...
长话短说 如果您的应用程序无法获得新的数据库连接,重新启动 ActiveMQ 代理可能会有所帮助。感兴趣的? 性能问题 几个月前,我们经历了一次生产中断。许多请求都因太熟悉而失败: java.s...
Apache Camel 2.20 今天发布了,和往常一样,我的任务是写一篇关于这个伟大的新版本及其亮点的博客。 该版本有以下亮点。 1) Java 9 技术预览支持 我们已经开始支持 Java...