JMS入门指南:点对点与发布订阅模式详解

4星 · 超过85%的资源 需积分: 6 67 下载量 127 浏览量 更新于2024-07-30 1 收藏 28KB DOCX 举报
JMS(Java Message Service)文档实例讲解深入阐述了Java消息服务的基础概念和关键组件,这对于理解和开发企业级应用程序中的消息传递至关重要。JMS旨在简化跨应用程序之间的异步通信,提供标准化的接口来处理点对点(P2P)和发布/订阅(Pub/Sub)两种消息模式。 1. JMS基本概念 - **点对点模型**:P2P模型的特点是消息一对一传输,消息生产者将消息发送至Queue(队列),消息接收者通过监听特定Queue接收消息,消息被消费后从队列消失,确保消息的唯一性。 - **发布/订阅模型**:在Pub/Sub模型中,消息生产者向Topic发布消息,多个接收者可以订阅该Topic,一旦有新消息发布,所有订阅者都会接收到。 2. 重要概念 - **Destination(目的地)**:是消息发送的目标,如Queue或Topic,表示消息的最终接收点,生产者无需关心消息的处理过程。 - **Message(消息)**:多种类型包括StreamMessage(数据流)、MapMessage(键值对)、TextMessage(文本)、ObjectMessage(序列化对象)、BytesMessage(二进制)和XMLMessage(XML数据),其中TextMessage和ObjectMessage最为常用。 - **Session(会话)**:与JMS提供者建立的交互连接,用于创建和管理消息。 - **Connection(连接)**:与JMS服务提供商的底层连接,通过Connection创建Session。 - **ConnectionFactory(连接工厂)**:用于创建Connection的工具类,它是JMS架构中的核心组件,负责连接的初始化和管理。 在实践中,开发者通常会按照以下步骤使用JMS: - 初始化ConnectionFactory实例。 - 使用ConnectionFactory创建Connection。 - 通过Connection创建Session,这一步可以设置事务属性等。 - 在Session中创建Destination(如Queue或Topic)。 - 使用Session创建不同类型的消息,并将其发送到Destination。 - 接收者通过监听Destination或使用Pull机制从Destination获取消息。 - 完成消息处理后,可能需要关闭Session、Connection和ConnectionFactory以释放资源。 理解并熟练运用这些概念和API是进行JMS编程的关键,有助于构建可靠、高效的分布式系统架构。通过JMS,开发者可以实现不同模块间的异步通信,提高系统的可扩展性和响应能力。

详细说一下一下代码:package com.mcloud.market.mq; import com.mcloud.common.constant.Constants; import org.apache.activemq.ActiveMQConnectionFactory; import org.apache.activemq.command.ActiveMQQueue; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.jms.config.JmsListenerContainerFactory; import org.springframework.jms.config.SimpleJmsListenerContainerFactory; import org.springframework.jms.core.JmsMessagingTemplate; import javax.jms.ConnectionFactory; import javax.jms.Queue; @Configuration public class ActiveMQConfig { @Value("${spring.activemq.broker-url}") private String brokerUrl; @Value("${spring.activemq.user}") private String username; @Value("${spring.activemq.password}") private String password; @Bean public Queue queue() { return new ActiveMQQueue(Constants.PREFIX + ".amount"); } @Bean(name = "messageQueue") public Queue amountQueue() { return new ActiveMQQueue(Constants.PREFIX + ".message"); } // 在Queue模式中,对消息的监听需要对containerFactory进行配置 @Bean("queueListener") public JmsListenerContainerFactory<?> queueJmsListenerContainerFactory(ConnectionFactory connectionFactory) { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(false); return factory; } @Bean public ConnectionFactory connectionFactory() { return new ActiveMQConnectionFactory(username, password, brokerUrl); } @Bean public JmsMessagingTemplate jmsMessageTemplate() { return new JmsMessagingTemplate(connectionFactory()); } }

2023-06-06 上传