activeMq多个监听配置:
集群或者zookeeper分布式集群分发处理只能到一个节点,即active的多个订阅端不会因此产生,除非一个系统配置了对个监听,监听一个发送通道(toptip)
在只有一个监听配置的时候,toptip就相当于queuen
配置多个监听客户端和配置一个一样只是clientId不同即可,当用的是下面的topic时有几个监听端就有会调用几次接收方法,(发送永远只发送一次)
当topic改为org.apache.activemq.command.ActiveMQQueue,(其他不需要动),不管有几个监听端,那个先消费就是谁,即只调用一次接受方法
对于分布式系统,一般采用topic的方式,监听对应需要的发送者,不会出现同一个子系统,对同一个发送者的同一个队列监听两次(否则造成监听多次重复调用)
一个浏览器同一个系统只能登录一个账户,否则session会覆盖掉
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jms="http://www.springframework.org/schema/jms" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core-5.5.0.xsd">
<bean id="topicSendConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<!-- <property name="brokerURL" value="udp://localhost:8123" /> -->
<!-- UDP传输方式 -->
<property name="brokerURL" value="tcp://10.0.1.126:61616" />
<!-- TCP传输方式 -->
<property name="useAsyncSend" value="true" />
</bean>
<bean id="topicListenConnectionFactory" class="org.apache.activemq.spring.ActiveMQConnectionFactory">
<!-- <property name="brokerURL" value="udp://localhost:8123" /> -->
<!-- UDP传输方式需要在activemq上面做配置 -->
<property name="brokerURL" value="tcp://10.0.1.126:61616" />
<!-- TCP传输方式 -->
</bean>
<!-- 定义主题 -->
<bean id="myTopic" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="esteelChat-mq" />
</bean>
<bean id="messageConvertForSys" class="com.esteel.chat.mq.MessageConvertForSys" />
<!-- TOPIC send jms模板 -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="topicSendConnectionFactory" />
<property name="defaultDestination" ref="myTopic" />
<property name="messageConverter" ref="messageConvertForSys" />
<!-- 发送模式 DeliveryMode.NON_PERSISTENT=1:非持久 ; DeliveryMode.PERSISTENT=2:持久 -->
<property name="deliveryMode" value="1" />
<property name="pubSubDomain" value="true" />
<!-- 开启订阅模式 -->
</bean>
<!-- 消息发送方 -->
<bean id="topicSender" class="com.esteel.chat.mq.MessageSender">
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<!-- <bean id="springContextUtil" class="com.esteel.common.SpringContextUtil" /> -->
<!-- 消息接收方 -->
<bean id="topicReceiver" class="com.esteel.chat.mq.MessageReceiver" />
<!-- 主题消息监听容器,一经注册,自动监听 -->
<bean id="listenerContainer"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="topicListenConnectionFactory" />
<property name="pubSubDomain" value="true" />
<!-- true 订阅模式 -->
<property name="destination" ref="myTopic" />
<!-- 目的地 myTopic -->
<property name="subscriptionDurable" value="true" />
<!-- -这里是设置接收客户端的ID,在持久化时,但这个客户端不在线时,消息就存在数据库里,直到被这个ID的客户端消费掉 -->
<property name="clientId" value="clientId_esteelChat_1" />///////////////////配置对个客户端的时候只要这个不同即可
<property name="messageListener" ref="topicReceiver" />
</bean>
<!-- 主题消息监听容器,一经注册,自动监听 -->
<bean id="listenerContainer2"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="topicListenConnectionFactory" />
<property name="pubSubDomain" value="true" />
<!-- true 订阅模式 -->
<property name="destination" ref="myTopic" />
<!-- 目的地 myTopic -->
<property name="subscriptionDurable" value="true" />
<!-- -这里是设置接收客户端的ID,在持久化时,但这个客户端不在线时,消息就存在数据库里,直到被这个ID的客户端消费掉 -->
<property name="clientId" value="clientId_esteelChat_2" />
<property name="messageListener" ref="topicReceiver" />
</bean>
<bean id="listenerContainer3"
class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="topicListenConnectionFactory" />
<property name="pubSubDomain" value="true" />
<!-- true 订阅模式 -->
<property name="destination" ref="myTopic" />
<!-- 目的地 myTopic -->
<property name="subscriptionDurable" value="true" />
<!-- -这里是设置接收客户端的ID,在持久化时,但这个客户端不在线时,消息就存在数据库里,直到被这个ID的客户端消费掉 -->
<property name="clientId" value="clientId_esteelChat_3" />
<property name="messageListener" ref="topicReceiver" />
</bean>
<!-- Servlet -->
<!-- <bean id="ControlServlet1" class="com.esteel.servlet.ControlServlet1">
<property name="topicSender" ref="topicSender" /> </bean> -->
</beans>
相关推荐
- 每个`<transportConnector>`元素代表一个监听端口,例如`uri="tcp://0.0.0.0:61616"`表示监听所有网络接口的61616端口。 3. **Policies** - `<policyEntries>`用于定义基于主题或队列的策略,如大小限制、死信...
本篇文章将深入探讨如何在ActiveMQ中配置并管理多个Topic类型通信。 Topic是一种发布/订阅模式的消息传递方式,允许多个消费者订阅同一个Topic,当生产者发布一条消息时,所有订阅了该Topic的消费者都会收到这条...
标题中的“activemq spring 客户端配置”指的是如何在Spring框架中设置Apache ActiveMQ作为消息中间件的客户端。ActiveMQ是Apache软件基金会开发的一个开源消息代理,它实现了多种消息协议,如JMS(Java Message ...
- **用户认证与授权**:ActiveMQ允许通过Jaas配置用户身份验证和权限控制,你可以定义多个用户角色并分配不同的访问权限。 - **虚拟主题(Virtual Topics)**:虚拟主题提供了安全隔离,使得不同用户组可以订阅...
监听器容器可以配置多个消费者,实现多线程并发消费;基于注解的方式更简洁,只需在方法上添加`@JmsListener`,指定目的地即可。 5. **多消费者模式**: 标题提到的“多消费者”意味着同一个消息可能被多个消费者...
- **生产者多线程**:Amq_Producer_mt.cpp 文件可能包含了多个线程同时发送消息的实现,提高了消息发送的并发能力。 - **消费者线程**:Amq_Consumer.cpp 可能设计了一个线程来监听并处理来自消息队列的事件,确保...
在本文中,我们将深入探讨如何将ActiveMQ与Spring框架整合,构建一个简单的消息传递系统。ActiveMQ是Apache软件基金会开发的...在实际项目中,可以根据需求调整配置,创建多个队列或主题,以满足不同的消息传递场景。
总的来说,配置Tomcat下的ActiveMQ HTTP连接涉及到多个方面,包括XML配置文件的修改、Web控制台的部署、安全性的设置以及Stomp协议的使用。理解这些知识点,能帮助你在实际开发中有效利用ActiveMQ实现可靠的消息传递...
为了接收消息,我们需要实现`MessageListener`接口,并在Spring配置文件中定义一个监听容器: ```xml <!-- 实现MessageListener接口 --> ``` 在`MessageListener`中,你需要实现`onMessage(Message ...
- **监控指标**:在管理界面上可以查看多个监控指标,例如: - **Number of pending messages**:未处理的消息总数。 - **Number of consumers**:当前消费者的数量。 - **Messages enqueued**:已发送到队列的...
2. **配置ActiveMQ服务器**:通常,我们会在本地或远程部署一个ActiveMQ服务器,并配置相应的连接工厂。在Spring的配置文件中,定义一个JMS连接工厂: ```xml <bean id="jmsConnectionFactory" class="org.apache....
发布/订阅模式中,消息被多个订阅者接收。 5. **消息类型**:ActiveMQ支持TextMessage、ObjectMessage、BytesMessage和MapMessage四种基本消息类型。 6. **消息持久化**:通过设置Message的持久化属性,可以在...
2. **配置ActiveMQ**:在`application.properties`或`application.yml`中配置ActiveMQ服务器的URL和其他相关参数。 3. **创建消息模板**:SpringBoot提供了`JmsTemplate`,用于发送和接收消息。 4. **编写消息监听器...
4. 定义消息消费者:创建一个监听特定主题的MessageListener。当有消息到达时,这个监听器会被触发并处理消息。 5. 编写消息发送接口:为了将消息发送逻辑封装起来,可以创建一个服务类,提供发送消息的方法,这些...
如果多个消费者同时连接到同一个队列,只有一个能接收到消息。这种模式适用于确保消息的顺序处理和至少一次交付,因为如果消费者未能正确处理消息,消息仍然在队列中,可以由其他消费者处理。 2. **主题(Topic)...
- **发布/订阅模型**:不同于点对点模型,发布/订阅模型允许多个订阅者接收同一个消息。当一个消息被发布时,所有订阅了该主题的消费者都会收到该消息。 ### 安装与配置 #### 安装ActiveMQ 1. **下载与安装**:...
5. **主题(Topic)**:主题支持多播,即多个消费者可以订阅同一个主题,接收到相同的消息。 **持久化机制** ActiveMQ 提供了两种主要的持久化机制:持久化到文件和持久化到数据库。 1. **持久化到文件**:这是 ...
这通常涉及到修改ActiveMQ的配置文件,如`activemq.xml`,设置监听端口、网络连接参数等。同时,我们还需要熟悉ActiveMQ的管理控制台,通过Web界面来监控和管理消息队列。 然后,我们将创建并使用单线程来处理多个...
而Topic则遵循发布/订阅模型,一个消息可以被多个消费者接收。 首先,我们需要在项目中添加ActiveMQ的相关依赖。在`pom.xml`文件中,添加以下Maven依赖: ```xml <groupId>org.springframework.boot ...