1. 什么是activemq
activeMQ是一种开源的,实现了JMS1.1规范的,面向消息(MOM)的中间件,为应用程序提供高效的、可扩展的、稳定的和安全的企业级消息通信。
  1. activemq的作用以及原理
Activemq 的作用就是系统之间进行通信。 当然可以使用其他方式进行系统间通信, 如果使用 Activemq 的话可以对系统之间的调用进行解耦, 实现系统间的异步通信。 原理就是生产者生产消息, 把消息发送给activemq。 Activemq 接收到消息, 然后查看有多少个消费者, 然后把消息转发给消费者, 此过程中生产者无需参与。 消费者接收到消息后做相应的处理和生产者没有任何关系
  1. activemq的几种通信方式
3.1publish(发布)-subscribe(订阅)(发布-订阅方式)
发布/订阅方式用于多接收客户端的方式.作为发布订阅的方式,可能存在多个接收客户端,并且接收端客户端与发送客户端存在时间上的依赖。一个接收端只能接收他创建以后发送客户端发送的信息。作为subscriber ,在接收消息时有两种方法,destination的receive方法,和实现message listener 接口的onMessage 方法

3.2 p2p(point-to-point)(点对点)

p2p的过程则理解起来比较简单。它好比是两个人打电话,这两个人是独享这一条通信链路的。一方发送消息,另外一方接收,就这么简单。在实际应用中因为有多个用户对使用p2p的链路
相互通信的双方是通过一个类似于队列的方式来进行交流。和前面pub-sub的区别在于一个topic有一个发送者和多个接收者,而在p2p里一个queue只有一个发送者和一个接收者。
  1. publish(发布)-subscribe(订阅)方式的处理
发布订阅模式的通信方式, 默认情况下只通知一次, 如果接收不到此消息就没有了。 这种场景只适用于对消息送达率要求不高的情况。 如果要求消息必须送达不可以丢失的话, 需要配置持久订阅。 每个订阅端定义一个 id,  <property name="clientId" 在订阅是向 activemq 注册。 发布消息 <property name="subscriptionDurable" value="true"/>和接收消息时需要配置发送模式为持久化template.setDeliveryMode(DeliveryMode.PERSISTENT);。 此时如果客户端接收不到消息, 消息会持久化到服务端(就是硬盘上), 直到客户端正常接收后为止。
  1. 4.2p - p(点对点)方式的处理
 
点对点模式的话, 如果消息发送不成功此消息默认会保存到 activemq 服务端直到有消费者将其消费, 所以此时消息是不会丢失的。
 
  1. 如何解决消息重复问题
所谓消息重复,就是消费者接收到了重复的消息,一般来说我们对于这个问题的处理要把握下面几点,
①.消息不丢失(上面已经处理了)
②.消息不重复执行
一般来说我们可以在业务段加一张表,用来存放消息是否执行成功,每次业务事物commit之后,告知服务端,已经处理过该消息,
这样即使你消息重发了,也不会导致重复处理
大致流程如下:
        业务端的表记录已经处理消息的id,每次一个消息进来之前先判断该消息是否执行过,如果执行过就放弃,如果没有执行就开始执行消息,消息执行完成之后存入这个消息的id

最新文章

  1. Linux 挂载管理(mount)
  2. Linux Linux程序练习十九
  3. DEV GridControl小结
  4. SQLSERVER跨数据库操作 ---- sp_addlinkedserver
  5. Redis 连接问题
  6. apache2 多站点虚拟主机配置
  7. [2015hdu多校联赛补题]hdu5302 Connect the Graph
  8. [转] Oracle analyze 命令分析
  9. openssl数字证书常见格式与协议介绍
  10. Eclipse的LogCat总是自动清空怎么办?
  11. 三种纯CSS实现三角形的方法
  12. spring技术翻译开始
  13. JavaScript推荐资料合集(前端必看)
  14. Android开发技巧——自定义控件之自定义属性
  15. GitHub的实现是否是基于此语言的支持网络编程性呢?
  16. Java基础学习-标识符
  17. LeetCode【100. 相同的树】
  18. 使用Tophat+cufflinks分析差异表达
  19. (25)HttpClient session
  20. Ubuntu网络配置IP和DNS等,适用于14.04,16.04和17.10

热门文章

  1. linux命令(6/11)--修改文件的用户组chgrp和文件所有者chown
  2. HTML Forms(转)
  3. ASP.NET MVC 处理404与500错误页面的方法
  4. 20145219 《Java程序设计》第16周课程总结
  5. 深入理解JVM 垃圾收集器(下)G1收集器
  6. VS路径定义
  7. 摘录:MINA 框架简介
  8. 构造函数=default表示什么?
  9. org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; 语法分析器在此文档中遇到多个 &quot;64,000&quot; 实体扩展; 这是应用程序施加的限制
  10. 滚动条——WPF ScrollViewer的应用