SpringBoot结合ActiveMQ(同时支持Queue和Topic)

在网上找了很多文章,一大堆,可直接运行的不多,特别是对于配置同时支持Queue和Topic两种方式的,也没有一个可以直接运行。最后不得以,慢慢琢磨,成功之后,就在这里分享一下经验。
在项目实际使用过程中,持久化队列用处不多,有持久化需求的,也基本是持久化到数据库的。最后也分享一个目前项目中关于记账服务使用activemq来异步记账的案例。

在SpringBoot中使用ActiveMQ

//MQ configuration class
@Configuration
public class MqConfig {@Beanpublic Queue queue(){return new ActiveMQQueue("mvp.queue");}@Beanpublic Topic topic(){return new ActiveMQTopic("mvp.topic");}@Beanpublic ActiveMQConnectionFactory connectionFactory() {return new ActiveMQConnectionFactory("admin", "admin", "tcp://localhost:61616");}@Beanpublic JmsListenerContainerFactory<?> jmsListenerContainerTopic(ActiveMQConnectionFactory connectionFactory) {DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();bean.setPubSubDomain(true);bean.setConnectionFactory(connectionFactory);return bean;}@Beanpublic JmsListenerContainerFactory<?> jmsListenerContainerQueue(ActiveMQConnectionFactory connectionFactory) {DefaultJmsListenerContainerFactory bean = new DefaultJmsListenerContainerFactory();bean.setConnectionFactory(connectionFactory);return bean;}@Beanpublic JmsMessagingTemplate jmsMessagingTemplate(ActiveMQConnectionFactory connectionFactory){return new JmsMessagingTemplate(connectionFactory);}
}
@Component
@EnableScheduling
public class producer {@Autowiredprivate JmsMessagingTemplate jmsMessagingTemplate;@Autowiredprivate Queue queue;@Autowiredprivate Topic topic;private static int count= 0;@Scheduled(fixedDelay=3000)public void send(){this.jmsMessagingTemplate.convertAndSend(this.queue,"hi.activeMQ,index="+count);this.jmsMessagingTemplate.convertAndSend(this.topic,"hi,activeMQ( topic ),index="+count++);}
}
@Component
public class consumerqueue {@JmsListener(destination = "mvp.topic",containerFactory="jmsListenerContainerTopic")public void receiveTopic(String text){System.out.println("Topic Consumer1:"+text);}@JmsListener(destination = "mvp.topic",containerFactory="jmsListenerContainerTopic")public void receiveTopic2(String text){System.out.println("Topic Consumer2:"+text);}@JmsListener(destination = "mvp.queue",containerFactory="jmsListenerContainerQueue")public void reviceQueue(String text){System.out.println("Queue Consumer:"+text);}
}

应用启动后的输出
Queue Consumer:hi.activeMQ,index=0
Topic Consumer1:hi,activeMQ( topic ),index=0
Topic Consumer2:hi,activeMQ( topic ),index=0
Queue Consumer:hi.activeMQ,index=1
Topic Consumer1:hi,activeMQ( topic ),index=1
Topic Consumer2:hi,activeMQ( topic ),index=1

案例1-记账模块MQ的使用

在跨境系统的记账模块中,记账分为两部分,这两部分内容基本一致,分为同步记账和异步记账。在同步记账完成后,会发送MQ消息去异步记账,而记账模块也会起一个任务去查询哪些因为记账服务中断没有执行记账的记录。
数据表T_BALANCE_DEALCHARGE_STATUS有4种状态:0-未记账,未发MQ,3-未记账,已发MQ ,1-记账成功,2-记账失败。定时任务会扫描状态为0-未记账未发MQ 和 三小时前的3-未记账已发MQ的记录,扫到后,重新发送MQ消息到队列。
记账模块有一个监听器来监听MQ记账队列,如果有消息,就执行记账。这样设计就比较清晰,记账入口有2个,一个是其他服务发送的记账请求,一个是定时任务发送的记账请求。
系统比较老旧,还是老式的xml配置。关键配置如下:

<!--记账定时任务扫描-->
<bean id="mdbtask-chargeupTaskSendMsg" class="com.ttf.ma.task.impl.ChargeupTaskSendMsgImpl"parent="mdbtask-abstractChargeupTask"><property name="jmsSender" ref="jmsSender" /></bean>
//查询没有发mq交易信息List<BalanceDealDto> balanceDealDtos = this.queryBalanceChargeupWithEnum(ChargeUpStatusEnum.CHARGEUP_NO_SEND_MQ);//查询3个小时没有记账交易信息进行记账List<BalanceDealDto> lists =this.queryBalanceChargeupWithEnum(ChargeUpStatusEnum.CHARGEUP_SEND_MQ);
<!--MQ监听-->
<bean id="mdbtask-chargeUpMessageListener" class="com.ttf.ma.mdb.impl.CommonChargeupListenerImpl"parent="mdbtask-abstractChargeupListener"><property name="balanceDealService" ref="mdbtask-balanceDealService" /><property name="peServiceFacade" ref="mdbtask-peServiceFacade" />
</bean>

案列2-MQ外部消息推送

跨境系统向外部发送消息提供了三种方式HTTP,SMS,EMAIL.第一种通常用于接口回调,后面两种用于商户通知,其中会涉及消息模板的使用,这个可以另起一篇文章来介绍。

SpringBoot结合ActiveMQ(同时支持Queue和Topic)相关推荐

  1. ActiveMQ—Queue与Topic区别

    Queue与Topic区别 转自:http://blog.csdn.net/qq_21033663/article/details/52458305 队列(Queue)和主题(Topic)是JMS支持 ...

  2. ActiveMQ的queue以及topic两种消息处理机制分析

    转自: http://itindex.net/detail/50057-activemq-queue-topic 上一期介绍了我们项目要用到activeMQ来作为jms总线,并且给大家介绍了activ ...

  3. activeMQ基础学习和SpringBoot整合activeMQ案例

    昨天仔细研究了activeMQ消息队列,也遇到了些坑,昨天晚上也写了篇文章记录坑的内容,其实上篇文章(SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNO ...

  4. springboot整合ActiveMQ(点对点和发布订阅)

    springboot整合ActiveMQ(点对点和发布订阅) ActiveMQ是什么,为什么使用MQ 是基于 Java 中的 JMS 消息服务规范实现的一个消息中间件. 1.系统解耦 采用中间件之后, ...

  5. 启动activemq_「Java」 - SpringBoot amp; ActiveMQ

    一.消息队列 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合.异步消息.流量削锋等问题,实现高性能.高可用.可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件. 目前在生产环境中使用较 ...

  6. SpringBoot整合activeMQ消息队列手动签收(Session.CLIENT_ACKNOWLEDGE)为什么失效啊?

    今天在家隔离办公,不太忙,然后就琢磨起来消息队列activeMQ的消息事务来解决分布式事务,但是奈何在SpringBoot整合activeMQ时,其消费者手动签收消息时出现了问题-->当acti ...

  7. Springboot整合ActiveMQ发送邮件

    虽然ActiveMQ以被其他MQ所替代,但仍有学习的意义,本文采用邮件发送的例子展示ActiveMQ 文章目录 1. 生产者 1.1 引入maven依赖 1.2 application.yml配置 1 ...

  8. SpringBoot集成ActiveMq消息队列实现即时和延迟处理

    原文链接:https://blog.csdn.net/My_harbor/article/details/81328727 一.安装ActiveMq 具体安装步骤:自己谷歌去 二.新建springbo ...

  9. ActiveMQ系列—ActiveMQ中的Queue和Topics

    如果您细心的话,在ActiveMQ提供的管理页面上已经看到有两个功能页面:Queue和Topic.Queue和Topic是JMS为开发人员提供的两种不同工作机制的消息队列. 在ActiveMQ官方的解 ...

  10. SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.21 SpringBoot 整合 ActiveMQ

    SpringBoot [黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)] SpringBoot 开发实用篇 文章目录 Spring ...

最新文章

  1. 前两天去A公司面试,面试管问的题目一下子闷了。很郁闷。重新答题。在这里分享一下...
  2. setstate是同步还是异步_【vert.x准备篇1】同步和异步,阻塞和非阻塞概念澄清
  3. JSON 接口如何实现 RSA 非对称加密与签名
  4. 我的第一个Windows Phone 7应用程序
  5. 透过源码看Session
  6. 前端学习(1979)vue之电商管理系统电商系统之让文本框获得焦点
  7. 单行 - JAVA 条件表达式
  8. W10系统matlab无法保存对该路径的更改 pathdef_MATLAB的运行与窗口介绍
  9. 黑马博客——详细步骤(二)项目功能的实现之登录功能
  10. 游戏笔记本计算机购买,游戏笔记本电脑推荐 三分钟售罄TA为何如此火爆?
  11. Nature Neuroscience(一)
  12. 工科数学分析寒假预习day4 更序问题和级数乘法
  13. python骰子游戏分析_两个骰子的Python概率骰子游戏
  14. 系统集成项目管理之项目质量管理
  15. 计算机组成原理 — GPU 图形处理器
  16. Quaternion to angular velocity. 四元数 角速度
  17. 范式-范式:范式 百科
  18. 输入年和月份,输出这一年该月份有多少天。
  19. Matlab基本函数-fix函数
  20. 【Flutter】十七、Flutter中常用的布局容器——网格布局GridView

热门文章

  1. Atitit 获取数据库表主键功能的实现 数据库模块 艾提拉attilax总结 package com.attilax.sql; import java.sql.Connection; im
  2. atitit.颜色查找 根据范围 图像处理 inRange
  3. Atitit jsr规范有多少个  407个。Jsr规范大全
  4. paip.utf-8,unicode编码的本质输出unicode文件原理 python
  5. paip.asp 项目流程及管理工具总结
  6. 阿里巴巴四十大盗教你零知识证明
  7. (转)先锋伯格:选择一条少有人走的路,所有的不同由此开始
  8. 阿里云高级架构师张然:混合云开放网络生态的探索与实践
  9. 阿里云季度营收首次超200亿 云计算进入自研技术时代
  10. 您有一封阿里云自动化运维沙龙邀请函待查收