一. queue队列
编写消费者工程activemq-consumer
- new ActiveMQ工程
- pom文件中MQ的坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
- 配置application.properties文件
server.port=8086
#配置ActiveMQ的broker-url
spring.activemq.broker-url=tcp://192.168.46.128:61616
spring.activemq.user=admin
spring.activemq.password=admin
#spring.jms.pub-sub-domain=false代表指定是Queue,如果是true代表的是Topic
#spring.jms.pub-sub-domain=false
songxinzhi.activemq.myQueueName=my-queue
spring.jms.pub-sub-domain=true
songxinzhi.activemq.topicQueue=topic-queue
- 编写消费者SpringBootMQConsumer
springboot启动消费者,注意启动类中要加入@EnableJms注解
动之后观察MQ控制台
编写消费者工程activemq-provider - new ActiveMQ工程,同上pom文件以及注解
server.port=8082
#配置ActiveMQ的broker-url
#spring.activemq.broker-url=tcp://192.168.46.128:61616
spring.activemq.broker-url=nio://192.168.46.128:5671
spring.activemq.user=admin
spring.activemq.password=admin
#spring.jms.pub-sub-domain=false代表指定是Queue,如果是true代表的是Topic
#spring.jms.pub-sub-domain=false
songxinzhi.activemq.myQueueName=my-queue
spring.jms.pub-sub-domain=true
songxinzhi.activemq.topicQueue=topic-queue
- 编写消费者SpringBootMQProvider
启动生产者
生产者每隔5秒在控制台发送send message:songxinzhi, 消费者控制台打印I received Message:songxinzhi
- MQ控制台消息
二. Topic 主题
-
配置文件变更
-
消费者代码
-
生产者代码
测试,先启动两个消费者,然后启动生产者,可以看出生产者发送的消息,每个消费者都可以收到相同的
生产者打印日志
三.ActiveMQ 支持的传输协议
在activeMQ安装目录的conf/activemq.xml中的transportConnectors标签之内
ActiveMQ支持的client-broker通讯协议有:TCP、NIO、UDP、SSL、Http(s)、VM。
Transmission Control Protocol (TCP)
1:这是默认的Broker配置,TCP的Client监听端口是61616。
2:在网络传输数据前,必须要序列化数据,消息是通过一个叫wire protocol的来序列化成字节流。默认情况下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使网络上的效率和数据快速交互。
3:TCP连接的URI形式:tcp://hostname:port?key=value&key=value,加粗部分是必须的
4:TCP传输的优点:(1)TCP协议传输可靠性高,稳定性强(2)高效性:字节流方式传递,效率很高(3)有效性、可用性:应用广泛,支持任何平台5:所有关于Transport协议的可配置参数,可以参见:http://activemq.apache.org/configuring-version-5-transports.html
New I/O API Protocol(NIO)
1:NIO协议和TCP协议类似,但NIO更侧重于底层的访问操作。它允许开发人员对同一资源可有更多的client调用和服务端有更多的负载。
2:适合使用NIO协议的场景:
(1)可能有大量的Client去链接到Broker上一般情况下,大量的Client去链接Broker是被操作系统的线程数所限制的。因此,NIO的实现比TCP需要更少的线程去运行,所以建议使用NIO协议
(2)可能对于Broker有一个很迟钝的网络传输NIO比TCP提供更好的性能
3:NIO连接的URI形式:nio://hostname:port?key=value
增强型的NIO
为了解决端口既支持NIO网络IO模型,又让它支持多个协议增强型的NIO为了解决端口既支持NIO网络IO模型,又让它支持多个协议,引入Enabling AUTO over NIO,自动适配TCP/NIO,修改activemq.xml配置,引入Enabling AUTO over NIO,自动适配TCP/NIO,修改activemq.xml配置
<transportConnector name="auto+nio" uri="auto+nio://localhost:5671"/>