ActiveMQ-5.15.2下载和启动(windows)
一、下载和部署
我的ActiveMQ版本是 5.15.2,参照别人家的博客,下载和启动照样成功。别人家的博客地址:
http://blog.csdn.net/clj198606061111/article/details/38145597
启动成功后,访问 http://localhost:8161/admin 输入用户名和密码 admin / admin(apache-activemq-5.15.2\conf\user.properties)
二、配置文件详解
下载 https://gitlab.com/zhuwenjoyce/TestActiveMQ.git ,启动ActiveMQ在http端口8161和tcp端口61616。
在eclipse里面打开TestActiveMQ项目,web.xml里面看到如下配置加载ActiveMQ:
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml,classpath*:ActiveMQ.xml</param-value> </context-param>
在src目录下打开ActiveMQ.xml,配置ActiveMQ连接:
<amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616" userName="admin" password="admin" />
配置spring容器里的ActiveMQ连接工厂:
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"> <!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory --> <property name="targetConnectionFactory" ref="amqConnectionFactory"></property> <!-- 同上,同理 --> <!-- <constructor-arg ref="amqConnectionFactory" /> --> <!-- Session缓存数量 --> <property name="sessionCacheSize" value="100" /> <!-- 接收者ID,用于Topic订阅者的永久订阅--> <property name="clientId" value="client-A" /> </bean>
配置spring容器里的jms规范(ActiveMQ属于jms规范的一种实现)的queue队列处理器:
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> <constructor-arg ref="connectionFactory" /> <!-- 非pub/sub模型(发布/订阅),即队列模式 --> <property name="pubSubDomain" value="false" /> <!-- 订阅消息持久化 --> <property name="deliveryPersistent" value="true" /> <!-- 配置持久化,同上 deliveryPersistent <property name="deliveryMode" value="2" /> --> </bean>
配置spring容器里的jms规范(ActiveMQ属于jms规范的一种实现)的topic主题处理器:
<bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate"> <!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 --> <constructor-arg ref="connectionFactory" /> <!-- pub/sub模型(发布/订阅) --> <property name="pubSubDomain" value="true" /> <!-- 订阅消息持久化 --> <property name="deliveryPersistent" value="true" /> <!-- 配置持久化,同上 deliveryPersistent <property name="deliveryMode" value="2" /> --> </bean>
配置queue消息队列name为test.queue的消息处理器queueReceiver1或queueReceiver1,如果发送name为test.queue的消息,则为如下配置中queueReceiver1或queueReceiver1任意一个处理器处理:
<jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto"> <jms:listener destination="test.queue" ref="queueReceiver1"/> <jms:listener destination="test.queue" ref="queueReceiver2"/> </jms:listener-container>
配置response消息回信:
<jms:listener-container destination-type="queue" container-type="default" connection-factory="connectionFactory" acknowledge="auto"> <jms:listener destination="test.queue.response" ref="queueReceiver1Res"/> </jms:listener-container>
配置topic主题列表的处理器,如果发送消息主题name为test.topic,则所有主题监听者都要执行对此消息的处理:
<jms:listener-container destination-type="durableTopic" container-type="default" connection-factory="connectionFactory" acknowledge="auto" client-id="client-A"> <!-- 注意:定义 subscription(即:durableSubscriptionName)持久化主题名字 --> <jms:listener destination="test.topic" subscription="topic_receiver1" ref="topicReceiver1"/> <jms:listener destination="test.topic" subscription="topic_receiver2" ref="topicReceiver2"/> </jms:listener-container>
三,项目代码结合配置文件解析
ActivemqController类代表前端请求过来的消息,根据不同消息,发送不同name命名消息到队列或者主题。
com.tgb.SpringActivemq.mq.producer.queue.QueueSender send()方法,发送指定name消息(test.queue)。根据上述配置文件,订阅了test.queue消息的是:queueReceiver1 和 queueReceiver2
于是com.tgb.SpringActivemq.mq.consumer.queue.QueueReceiver1 或 queueReceiver2 就接收到了消息并进行处理。
在QueueReceiver1 中还对response进行了回信处理。
topic方法以此类推。
![](https://images.cnblogs.com/cnblogs_com/zhuwenjoyce/945554/o_201113020411my-zhifubao-shouqianma.jpeg)