ActiveMQ使用总结
一、下载使用:
官网下载apache-activemq-5.8.0-bin.tar.gz、apache-activemq-5.8.0-bin.zip
解压,然后启动ActiveMQ服务器
方法1:
直接运行bin\activemq.bat
方法2(在JVM中嵌套启动):
cd example
ant embedBroker
可以登录ActiveMQ消息管理后台系统:
http://localhost:8161/admin
admin/admin登录
二、运行小例子
1、Queue消息示例:
* 启动Queue消息消费者
cd example
ant consumer
* 启动Queue消息生产者
cd example
ant producer
简要说明:生产者(producer)发消息,消费者(consumer)接消息,发送/接收2000个消息后自动关闭
2、Topic消息示例:
* 启动Topic消息消费者
cd example
ant topic-listener
* 启动Topic消息生产者
cd example
ant topic-publisher
简要说明:重复10轮,publisher每轮发送2000个消息,并等待获取listener的处理结果报告,然后进入下一轮发送,最后统计全局发送时间。
三、Queue与Topic的比较
JMS 公共 | 点对点域 | 发布/订阅域 |
ConnectionFactory | QueueConnectionFactory | TopicConnectionFactory |
Connection | QueueConnection | TopicConnection |
Destination | Queue | Topic |
Session | QueueSession | TopicSession |
MessageProducer | QueueSender | TopicPublisher |
MessageConsumer | QueueReceiver | TopicSubscriber |
JMS 定义了两种方式:Queue(点对点);Topic(发布/订阅)。
1、JMS Queue执行load balancer语义:
一条消息仅能被一个consumer收到。如果在message发送的时候没有可用的consumer,那么它将被保存一直到能处理该message的consumer可用。如果一个consumer收到一条message后却不响应它,那么这条消息将被转到另一个consumer那儿。一个Queue可以有很多consumer,并且在多个可用的consumer中负载均衡。
2、Topic实现publish和subscribe语义:
一条消息被publish时,它将发到所有感兴趣的订阅者,所以零到多个subscriber将接收到消息的一个拷贝。但是在消息代理接收到消息时,只有激活订阅的subscriber能够获得消息的一个拷贝。
3、分别对应两种消息模式:
Point-to-Point (点对点),Publisher/Subscriber Model (发布/订阅者)
其中在Publicher/Subscriber 模式下又有Nondurable subscription(非持久订阅)和durable subscription (持久化订阅)2种消息处理方式。
四、activeMQ消息收发开发流程
发送消息的基本步骤:
(1)、创建连接使用的工厂类JMS ConnectionFactory
(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动
(3)、使用连接Connection 建立会话Session
(4)、使用会话Session和管理对象Destination创建消息生产者MessageSender
(5)、使用消息生产者MessageSender发送消息
消息接收者从JMS接受消息的步骤
(1)、创建连接使用的工厂类JMS ConnectionFactory
(2)、使用管理对象JMS ConnectionFactory建立连接Connection,并启动
(3)、使用连接Connection 建立会话Session
(4)、使用会话Session和管理对象Destination创建消息接收者MessageReceiver
(5)、使用消息接收者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver消息接收者必须实现了MessageListener接口,需要定义onMessage事件方法。
下面分类说明:
Point-to-Point (点对点)消息模式开发流程
1、生产者(producer)开发流程(ProducerTool.java):
1.1 创建Connection:
根据url,user和password创建一个jms Connection。
1.2 创建Session:
在connection的基础上创建一个session,同时设置是否支持事务和ACKNOWLEDGE标识。
1.3 创建Destination对象:
需指定其对应的主题(subject)名称,producer和consumer将根据subject来发送/接收对应的消息。
1.4 创建MessageProducer:
根据Destination创建MessageProducer对象,同时设置其持久模式。
1.5 发送消息到队列(Queue):
封装TextMessage消息,使用MessageProducer的send方法将消息发送出去。
2、消费者(consumer)开发流程(ConsumerTool.java):
2.1 实现MessageListener接口:
消费者类必须实现MessageListener接口,然后在onMessage()方法中监听消息的到达并处理。
2.2 创建Connection:
根据url,user和password创建一个jms Connection,如果是durable模式,还需要给connection设置一个clientId。
2.3 创建Session和Destination:
与ProducerTool.java中的流程类似,不再赘述。
2.4创建replyProducer【可选】:
可以用来将消息处理结果发送给producer。
2.5 创建MessageConsumer:
根据Destination创建MessageConsumer对象。
2.6 消费message:
在onMessage()方法中接收producer发送过来的消息进行处理,并可以通过replyProducer反馈信息给producer
Publisher/Subscriber(发布/订阅者)消息模式开发流程
1、订阅者(Subscriber)开发流程(TopicListener.java):
1.1 实现MessageListener接口:
在onMessage()方法中监听发布者发出的消息队列,并做相应处理。
1.2 创建Connection:
根据url,user和password创建一个jms Connection。
1.3 创建Session:
在connection的基础上创建一个session,同时设置是否支持事务和ACKNOWLEDGE标识。
1.4 创建Topic:
创建2个Topic, topictest.messages用于接收发布者发出的消息,topictest.control用于向发布者发送消息,实现双方的交互。
1.5 创建consumer和producer对象:
根据topictest.messages创建consumer,根据topictest.control创建producer。
1.6 接收处理消息:
在onMessage()方法中,对收到的消息进行处理,可直接简单在本地显示消息,或者根据消息内容不同处理对应的业务逻辑(比如:数据库更新、文件操作等等),并且可以使用producer对象将处理结果返回给发布者。
2、发布者(Publisher)开发流程(TopicPublisher.java):
2.1 实现MessageListener接口:
在onMessage()方法中接收订阅者的反馈消息。
2.2 创建Connection:
根据url,user和password创建一个jms Connection。
2.3 创建Session:
在connection的基础上创建一个session,同时设置是否支持事务和ACKNOWLEDGE标识。
2.4 创建Topic:
创建2个Topic,topictest.messages用于向订阅者发布消息,topictest.control用于接收订阅者反馈的消息。这2个topic与订阅者开发流程中的topic是一一对应的。
2.5 创建consumer和producer对象:
根据topictest.messages创建publisher;
根据topictest.control创建consumer,同时监听订阅者反馈的消息。
2.6 给所有订阅者发送消息,并接收反馈消息:
示例代码中,一共重复10轮操作。
每轮先向所有订阅者发送2000个消息;
然后堵塞线程,开始等待;
最后通过onMessage()方法,接收到订阅者反馈的“REPORT”类信息后,才print反馈信息并解除线程堵塞,进入下一轮。
注:可同时运行多个订阅者测试查看此模式效果
整理转自:http://jinguo.iteye.com/blog/
ActiveMQ使用总结的更多相关文章
- Java消息队列--ActiveMq 实战
1.下载安装ActiveMQ ActiveMQ官网下载地址:http://activemq.apache.org/download.html ActiveMQ 提供了Windows 和Linux.Un ...
- 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)
Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...
- (jms)ActiveMQ 安装配置.
前言 ActiveMQ他是Apache出品的一个JMS提供者,管理会话和队列,运行在JVM下,支持多种语言,如JAVA,C++,C#,应用协议: OpenWire,Stomp REST,WS Noti ...
- node(ActiveMq)
简单尝试了node下的ActiveMQ 1.下载apache-activemq-5.9.0,执行bat文件: 2.登录http://localhost:8161/admin可查看其管理后台: 3.安装 ...
- ActiveMQ的集群方案对比及部署
转载:http://blog.csdn.net/lifetragedy/article/details/51869032 ActiveMQ的集群 内嵌代理所引发的问题: 消息过载 管理混乱 如何解决这 ...
- JMS学习之路(一):整合activeMQ到SpringMVC
JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到实际的业务需求中的话我们可以 ...
- ActiveMQ消息队列的使用及应用
这里就不说怎么安装了,直接解压出来就行了. 谢绝转载,作者保留所有权力 目录: 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2 ...
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜 近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了.对,我说的就是类似快递柜.菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快 ...
- Spring下ActiveMQ实战
MessageQueue是分布式的系统里经常要用到的组件,一般来说,当需要把消息跨网段.跨集群的分发出去,就可以用这个.一些典型的示例就是: 1.集群A中的消息需要发送给多个机器共享: 2.集群A中消 ...
- ActiveMQ(li)
一.ActiveMQ 首先,ActiveMQ不是一个框架,它不是struct,webx,netty这种框架,它更像是tomcat服务器,因为你使用它之前必须启动它,activeMQ和JMS的关系有点类 ...
随机推荐
- 浏览器测试功能(jquery1.9以后已取消)
// 1.9以后取消了msie这些私有方法判断.这里封装加回. var matched = (function(ua) { ua = ua.toLowerCase(); var match = /(o ...
- js点击 密码输入框密码显示隐藏
很多密码框都有个眼睛标记,点击能显示密码.原理就是点击切换password为text等显示 下面上代码 <!DOCTYPE html> <html> <head> ...
- BJDP结对编程活动
7月21日参与了 BJDP北京的活动 在北京首次参与能够参与动手编程活动,感觉挺不错的. 本次活动共有三项内容 1. 金锐分享单元测试的Mocking技术,20 mins 2. 伍 ...
- 负载均衡-多台机子session不起效:把php.ini中file改为memcache存储
一 开启memcache服务 二 修改php.ini中session配置 php/lib/php.ini session.save_handler = memcache session.save_pa ...
- js在本地预览图片
移动web <body> <form enctype="multipart/form-data" name="form1"> 上传文件: ...
- 使用PHP在共享内存中存储数据集
我们可以使用共享内存作为一种独特的存储选项,提供快速读/写操作和进程互操作性等优势. 对于 Web 应用程序,这意味着: 缓存存储(数据库查询.Web 服务数据.外部数据) 会话存储 应用程序之间的数 ...
- yii 缓存探究
1.在配置文件中 //在权威指南上是'cache' 其实可以根据不同的缓存组件起不同的名称 //memcache缓存 'memcache' => array( 'class' => 'sy ...
- shell编程的一些例子3
数值处理 1.let 命令 bash 的内部命令let可以用来计算算术表达式的值.如果表达式中有空格或者特殊字符,则应将表达式括在双引号中. let的语法命令:let express-list 如果最 ...
- Unity给力插件之MegaFiers
这是一个关于网格变形的插件.其中有非常多的功能. 这是它的API地址:http://www.west-racing.com/mf/ 花了2天的时间实践并整理了其中绝大多数的功能,只有一些关于特殊格式的 ...
- Quartz1.8.5例子(十四)
org.quartz.scheduler.instanceName: PriorityExampleScheduler # Set thread count to 1 to force Trigger ...