云和教育:云和数据集团旗下高端ICT职业教育品牌
  • 国家级全民数字素养与技能培训基地
  • 河南省第一批产教融合型企业建设培育单位
  • 郑州市数字技能人才(码农)培养评价联盟

Java:消息中间件之activeMQ详解

  • 作者:云和教育
  • 日期:2020-08-05
  • 浏览:1,207次

Activemq是什么?ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

主要特点:

  • 1、多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WS Notification,XMPP,AMQP
  • 2、完全支持JMS1.1和J2EE 1.4规范 (持久化,XA消息,事务)
  • 3、对Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性
  • 4、通过了常见J2EE服务器(如 Geronimo,JBoss 4, GlassFish,WebLogic)的测试,其中通过JCA 1.5 resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上
  • 5、支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA
  • 6、支持通过JDBC和journal提供高速的消息持久化
  • 7、从设计上保证了高性能的集群,客户端-服务器,点对点
  • 8、支持Ajax
  • 9、支持与Axis的整合
  • 10、可以很容易得调用内嵌JMS provider,进行测试

 

ActiveMQ消息传递的两种类型:

一种是点对点的,即一个生产者和一个消费者一一对应;

另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。

JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

  • 1、 StreamMessage — Java原始值的数据流
  • 2、 MapMessage–一套名称-值对
  • 3、TextMessage–一个字符串对象
  • 4、ObjectMessage–一个序列化的 Java对象
  • 5、 BytesMessage–一个字节的数据流

    ActiveMQ的使用方法

    点对点:

发布/订阅:

在点对点或队列模型下,一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被概括为:只有一个消费者将获得消息。生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。每一个成功处理的消息都由接收者签收。

发布者/订阅者模型支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。这种模式被概括为:多个消费者可以获得消息.在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够购订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

 

使用其他的工程来学习:

工程需要添加jar包:

Queue Producer

生产者:生产消息,发送端。

第一步:创建ConnectionFactory对象,需要指定服务端ip及端口号。

第二步:使用ConnectionFactory对象创建一个Connection对象。

第三步:开启连接,调用Connection对象的start方法。

第四步:使用Connection对象创建一个Session对象。

第五步:使用Session对象创建一个Destination对象(topic、queue),此处创建一个Queue对象。

第六步:使用Session对象创建一个Producer对象。

第七步:创建一个Message对象,创建一个TextMessage对象。

第八步:使用Producer对象发送消息。

第九步:关闭资源。

Consumer

消费者:接收消息。

第一步:创建一个ConnectionFactory对象。

第二步:从ConnectionFactory对象中获得一个Connection对象。

第三步:开启连接。调用Connection对象的start方法。

第四步:使用Connection对象创建一个Session对象。

第五步:使用Session对象创建一个Destination对象。和发送端保持一致queue,并且队列的名称一致。

第六步:使用Session对象创建一个Consumer对象。

第七步:接收消息。

第八步:打印消息。

第九步:关闭资源

文/云和数据JAVA技术专家

2020年,云和数据全面升级课程,设有HTML5全栈精英班、全域电商精英班、PHP全栈web高薪班、Unity虚拟现实大师班、UI视觉交互精英班、Java大数据精英班、大数据人工智能专家班、华为认证课程……在云和,你可以学习一门自己感兴趣的技术作为踏入IT行业的敲门砖!要知道,兴趣和欲望才是驱动一个人学习和进步的原动力。努力,是你走向成功的唯一捷径。