ActiveMQ开发简明教程

来源:互联网 发布:企查查如何导出数据 编辑:程序博客网 时间:2024/05/18 23:12

资源链接

  • ActiveMQ入门实例
  • activemq-5141-release下载
  • 入门文档(英文,官方)
  • 图解ActiveMQ

概念

ActiveMQ特性

ActiveMQ特性详细介绍

  • ActiveMQ服务器工作模型
  • ActiveMQ消息传送模型
  • ActiveMQ消息选择器
  • ActiveMQ消息签收
  • ActiveMQ消息传送模式
  • ActiveMQ优先级设置
  • ActiveMQ消息过期设置
  • ActiveMQ持久订阅设置
  • ActiveMQ异步发送消息
  • ActiveMQ消费者特性
  • ActiveMQ消息预取机制

消息模型

ActiveMQ中有两种类型的消息模型

  1. 点对点(point-to-point,简称PTP)Queue消息传递模型
  2. 发布/订阅(publish/subscribe,简称pub/sub)Topic消息传递模型

更多介绍

类型 Topic Queue 概要 Publish Subscribe messaging 发布订阅消息 Point-to-Point 点对点 有无状态 topic数据默认不落地,是无状态的。 Queue数据默认会在mq服务器上以文件形式保存,比如Active MQ一般保存在$AMQ_HOME\data\kr-store\data下面。也可以配置成DB存储。 完整性保障 并不保证publisher发布的每条数据,Subscriber都能接受到。 Queue保证每条数据都能被receiver接收。 消息是否会丢失 一般来说publisher发布消息到某一个topic时,只有正在监听该topic地址的sub能够接收到消息;如果没有sub在监听,该topic就丢失了。 Sender发送消息到目标Queue,receiver可以异步接收这个Queue上的消息。Queue上的消息如果暂时没有receiver来取,也不会丢失。 消息发布接收策略 一对多的消息发布接收策略,监听同一个topic地址的多个sub都能收到publisher发送的消息。Sub接收完通知mq服务器 一对一的消息发布接收策略,一个sender发送的消息,只能有一个receiver接收。receiver接收完后,通知mq服务器已接收,mq服务器对queue里的消息采取删除或其他操作。

消息类型

  • 文本消息

    TextMessage message = session.createTextMessage(msg);
  • Map消息

    MapMessage message = session.createMapMessage();
  • 序列化消息

    Staff staff = new Staff(1, "搬砖工"); // Staff必须实现序列化ObjectMessage message = session.createObjectMessage(staff);
  • 字节消息

    String str = "BytesMessage 字节消息";BytesMessage message = session.createBytesMessage();message.writeBytes(str.getBytes());
  • 流消息

    String str = "StreamMessage 流消息";StreamMessage message = session.createStreamMessage();message.writeString(str);message.writeInt(521);

消息确认模式

客户端成功接收一条消息的标志是这条消息被签收。成功接收一条消息一般包括如
下三个阶段:
1. 客户端接收消息;
2. 客户端处理消息;
3. 消息被确认。确认可以由ActiveMQ 发起,也可以由客户端发起,取决于Session 确认模式的设置。
在带事务的 Session 中,确认自动发生在事务提交时。如果事务回滚,所有已经接收的消息将会被再次传送。
在不带事务的Session 中,一条消息何时和如何被确认取决于Session 的设置。

模式 说明 Session.AUTO_ACKNOWLEDGE 默认的消息确认模式, session 将按照MessageConsumer.receive() 返回成功或者用于办法回调MessageListener.onMessage() 返回成功来主动回执消息确认。 Session.CLIENT_ACKNOWLEDGE 在这种模式下,客户端应用法度代码中显式调用Message.acknowledge()办法,以确认该消息。 Session.DUPS_OK_ACKNOWLEDGE 该模式,jms session可以或许主动的回执消息确认,然则它是一种怠惰的消息确认模式,一旦应用体系故障,一些消息可能会被处理惩罚然则没有回执,一旦体系重启,则会呈现消息的重发题目。
这是一种最快的消息确认模式,然则,花费者必须处理惩罚反复的消息处理惩罚题目。(例如:如何侦测和丢弃重发的消息的处理惩罚逻辑) Session.SESSION_TRANSACTED 当应用事务时,会话会隐含SESSION_TRANSACTED模式。事务提交的反响,然后相当于消息的确认。
当应用JMS事务来发送一组消息(多个消息),交易模式是很是有效的。但避免应用事务发送一个消息,因为这会带来额外的开销提交或回滚事务。 ActiveMQSession.INDIVIDUAL_ACKNOWLEDGE 它不是一个标准的消息确认模式,很类似与CLIENT_ACKNOWLEDGE,只可惜它的消息确认是一种办法回调。在完成消息处理惩罚后不会去向理惩罚消息确认的。

事务

ActiveMQ支持两种事务

  • JMS 事务。使用Session的commint()和rollback()即可实现。(类似于JDBC Connection对象)
  • XA 事务。XASession,XAResource通过与消息中介(Message Broker)通信来实现。

事务原理
在支持事务的session中,producer发送message时在message中带有transactionID。broker收到message后判断是否有transactionID,如果有就把message保存在transaction store中,等待commit或者rollback消息。所以ActiveMQ的事务是针对broker而不是producer,不管session是否commit,broker都会收到message。

如果producer发送模式选择了persistent,那么message过期后会进入死亡队列。在message进入死亡队列之前,ActiveMQ会删除message中的transaction ID,这样过期的message就不在事务中了,不会保存在transaction store中,会直接进入死亡队列。

开发

spring配置

  • ActiveMQ spring配置

支持的协议与案例

接口 协议 代码实例 JMS OpenWire Send to Queue
Send to Topic
Receive from Queue
Receive from Topic JMS(Apache Camel) OpenWire Send to Queue
Send to Topic
Receive from Queue
Receive from Topic REST(JAX-RS) REST Send to Queue
Send to Topic
Receive from Queue
Receive from Topic WebSocket STOMP Send to Queue
Send to Topic
Receive from Queue
Receive from Topic

优秀案例

  • 基于ActiveMQ的消息中间件系统 OneMM逻辑与物理架构设计详解

配置

持久化

  • ActiveMQ 三种持久化配置

其他

  • ActiveMQ桥接

小插曲

  • 默认的用户名和密码
  • Maven配置
    <dependency>  <groupId>org.apache.activemq</groupId>  <artifactId>activemq-all</artifactId>  <version>5.14.1</version></dependency> 
0 0
原创粉丝点击