交通信用网站建设,外网vp(永久免费)加速器下载,厦门公司注册费用,影视传媒网站设计文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webce… 文章目录 1、安装ActiveMQ2、整合3、发送消息到队列4、使用消息监听器对消息队列监听5、流程性业务消息消费完转入下一个消息队列6、发布订阅模型 1、安装ActiveMQ docker安装 docker pull webcenter/activemqdocker run -d --name activemq -p 61616:61616 -p 8161:8161 webcenter/activemq
# * 61616是 activemq 的服务端口映射为61616
# * 8161是 管理后台端口对外映射为8161访问控制台http://IP:8161 常规安装安装为系统服务 下载
https://activemq.apache.org/components/classic/download/解压缩即安装 启动服务双击bin/win64/activemq.bat 访问控制台http://127.0.0.1:8161/用户名密码admin
2、整合
导入ActiveMQ的起步依赖
dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-activemq/artifactId
/dependency加入相关配置
spring: activemq: broker-url: tcp://localhost:61616 jms: pub-sub-domain: false # JMS的两种模型点对点、发布订阅模型这里为true即发布订阅模型template: default-destination: codetest #默认的消息队列的名称注入JmsMessagingTemplate操作对象进行消息的发送与接收
Autowired
private JmsMessagingTemplate jmsMessagingTemplate;业务逻辑代码就实现上篇的MessageService接口就行上篇在拿一个队列模拟MQ来进行消息的生产与消费这里有了真正的队列来存储消息了。
3、发送消息到队列
convertAndsend方法发送消息到消息队列convert即转换转换成能接受的数据类型然后发送因此这个方法的形参类型可为Object调用方便。
Service
Slf4j
public class MessageServiceActivemqImpl implements MessageService { Autowired private JmsMessagingTemplate jmsMessagingTemplate; public void sendMessage(String id) { log.info(使用Active将待发送短信的订单纳入处理队列idid);jmsMessagingTemplate.convertAndSend(id); } public String doMessage() { String id jmsMessagingTemplate.receiveAndConvert(String.class);log.info(已完成短信发送业务订单id id);return id; }
}
取消息消费则相反先receive接收再convert转换调用receiveAndConvert形参为要转的目标类型。调用下上篇的接口其实controller里就只是调用了一下service层方法可以看到消息写入成功 需要指定队列存储消息则convertAndSend方法和receiveAndConvert方法传参多一个队列名即可。
jmsMessagingTemplate.convertAndSend(order.queue.id,id); String id jmsMessagingTemplate.receiveAndConvert(order.queue.id,String.class);4、使用消息监听器对消息队列监听
实际开发时自然不用每次去手动取消息直接JmsListener注解监听队列有消息了就自动拿出来消费执行逻辑代码就行
Component
Slf4j
public class MessageListener { JmsListener(destination order.queue.id) public void receive(String id){ //实际业务逻辑代码 log.info(已完成短信发送业务idid); }
}
重启服务发现上面发送的消息已被自动消费 5、流程性业务消息消费完转入下一个消息队列
SendTo注解将一个方法的返回值给自动加到某个队列里搭配JmsListener注解就可实现消费消息的流转。 当然也可单独使用就发送就好像CachePut
Component
Slf4j
public class MessageListener { JmsListener(destination order.queue.id) SendTo(order.other.queue.id) public String receive(String id){ log.info(已完成短信发送业务idid); //把这条消息处理完以后返回return a handled new id : id; }
}
这里对比下发布订阅模型与交换机消息被消费以后队列中就没了如果其他程序也要用又该如何处理? 发布订阅模型加入交换机来实现。比如RabbitMQ的Fanout Exchange广播、Direct Exchange路由、Topic Exchange话题。这里是把消息广播或路由到队列而SendTo搭配JmsListener是在代码中处理完消息后的流转。 这种流水线的关系体现的是一种顺序和依赖的业务。
6、发布订阅模型
spring: activemq: broker-url: tcp://localhost:61616 jms: pub-sub-domain: true #发布订阅模型template: default-destination: codetest #默认的消息队列的名称此时发消息就在Topics中了