通过以下配置,可以实现java后端的ActiveMQ配置,如果想要在前段页面显示,可以参照https://blog.csdn.net/lycz_tpself/article/details/81123461。
- 配置使用的是maven方式,下面给出AMQ所需的jar包(仅提供了AMQ额外需要的,Spring的请自行搞定)
<!-- Java JMS 原生API -->
<dependency>
<groupId>javax.jms</groupId>
<artifactId>javax.jms-api</artifactId>
<version>2.0.1</version>
</dependency>
<!-- spring-jms API -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- activemq核心包 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.7.0</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-spring</artifactId>
<version>5.15.4</version>
</dependency>
- 消息监听类的位置
- Spring中的配置文件 (总的配置代码在图片下面)
下图的destination对应上上上张图中设置的通道名称 ,ref指向上图中监听类bean的id,method指向监听类中的监听方法名称
配置代码:
<?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:context="http://www.springframework.org/schema/context"
xmlns:jms="http://www.springframework.org/schema/jms" xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:c="http://www.springframework.org/schema/c" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
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/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<!-- activemq相关配置,此配置方式需要添加amq对应的命名空间 -->
<!-- 连接工厂 -->
<amq:connectionFactory id="amqConnectionFactory" brokerURL="tcp://localhost:61616"/>
<!-- 设置预取策略 -->
<amq:prefetchPolicy id="prefetchPolicy" queuePrefetch="1" topicPrefetch="1000"/>
<!--为了提高效率,配置一个连接池 -->
<bean id="cachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory"
p:targetConnectionFactory-ref="amqConnectionFactory"
p:sessionCacheSize="10"/>
<!-- 配置消息终点 -->
<amq:queue id="spittleQueue" physicalName="online.exam.queue"/>
<amq:topic id="spittleTopic" physicalName="online.exam.topic"/>
<bean id="messageConverter"
class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
<!-- 配置JmsTemplate(用于简化代码) -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"
p:defaultDestination-ref="spittleTopic"
p:messageConverter-ref="messageConverter">
<constructor-arg ref="amqConnectionFactory" />
</bean>
<!-- 消息监听 -->
<bean id="messageListener1" class="controller.amq.MessageListener1" />
<bean id="messageListener2" class="controller.amq.MessageListener2" />
<bean id="messageListener3" class="controller.amq.MessageListener3" />
<bean id="messageListener4" class="controller.amq.MessageListener4" />
<!-- listener-container 默认是queue类型的 -->
<jms:listener-container connection-factory="amqConnectionFactory">
<jms:listener destination="spittle.alert.queue" ref="messageListener1" method="onMessage" />
<jms:listener destination="spittle.alert.queue" ref="messageListener2" method="onMessage" />
</jms:listener-container>
<jms:listener-container destination-type="topic" connection-factory="amqConnectionFactory">
<jms:listener destination="biz1.topic" ref="messageListener3" method="onMessage" />
<jms:listener destination="biz1.topic" ref="messageListener4" method="onMessage" />
</jms:listener-container>
- 生产者代码(主要看红框)
- 消费者代码
系统启动后,进入http://127.0.0.1:8161/admin/查看AMQ信息
点击topic的active subscribers(每一条监听都有client id)