activemq入门基于queue和基于topic的demo
来源:互联网 发布:c stl 源码 编辑:程序博客网 时间:2024/05/17 12:03
概述:
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。(这句话引用百度的,哈哈)
背景:
- 1、采用Maven工程
- 2、jdk 1.8 (它要求是jdk1.7以上)
1、下载activemq
官方网址:下载activemq, window下载
apache-activemq-5.15.0-bin.zip
2、启动activemq 服务器
解压下载包,找到 你解压的目录\apache-activemq-5.15.0\bin
输入cmd回车就行,进入dos窗口,输入
activemq start (双击activemq.bat好像起不来)
3、进入后台添加消息队列(Queue)(等会消息就会发送这里)
后台地址: http://127.0.0.1:8161/admin/
会弹出用户和密码框,两个框都输入admin就行。(初始密码)
服务器起来,开始写代码
4、首先引入jar(pom.xml)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.jack</groupId><artifactId>ActiveMQ</artifactId><version>0.0.1-SNAPSHOT</version><name>ActiveMQDemo</name><description>学习activeMq</description><dependencies><dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-all</artifactId><version>5.15.0</version></dependency></dependencies></project>
总结:这里采用一个总包,其实activemq分成很多部分,入门嘛简单就好。
接收者:
import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 接受消息 * @author Administrator * */public class Receiver {public static void main(String[] args){//connectionFactory:连接工厂,JMS用创建连接ConnectionFactory connectionFactory;//Connection:JMS客户端到JMSProvider的连接Connection connection = null;//SEssion:一个发送或接收消息的会话Session session;//Destination:消息目的地,消息发送给谁Destination destination;//消费者,消息接受者MessageConsumer consumer;connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try {//从工厂得到连接对象connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session注意参数firstQueue是在console进行配置的destination = session.createQueue("firstQueue");consumer = session.createConsumer(destination);while (true) {//设置接收者接受消息的时间,设置100sTextMessage message = (TextMessage) consumer.receive(100000);if(null != message){System.out.println("收到消息" + message.getText());}else {break;}}} catch (JMSException e) {e.printStackTrace();} finally {try{if (null != connection) {connection.close();}}catch (Throwable e){}}}}创建Session时 有两个重要的参数,第一个boolean类型的参数用来表示是否采用事务消息。如果是消息是事务的,对应的参数设置为true,此时消息的提交自动有commit处理,消息的回滚则自动由rollback处理。如果不是事务设置为false
第二参数 :
- Session.AUTO_ACKNOWLEGE 表示Session会自动确认所接收到的消息,
- Session.Client_ACKNOWLEDGE 表示由客户端程序通过调用消息的确认方法来确认所接收的消息。
- Session.DUPS_OK_ACKNOWLEDGE 延迟确认,导致消息重复投递。
消费者:
package com.jack;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.JMSException;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;/** * 发送 * @author Administrator * */public class Sender {private static final int SEND_NUMBER = 5;public static void main(String[] args) {//ConnectionFactory:连接工厂,JMS用它创建连接ConnectionFactory connectionFactory;//Connetcion : JMS 客户端到JMS Provider 的连接Connection connection = null;//Session :一个发送或接收消息的线程Session session;//Destination:消息的目的地;消息发送给谁Destination destination;//MessageProducer : 消息发送者MessageProducer producer;//TextMessageProducer producer;//构造ConnectionFactory实例对象,此处采用ActiveMq的实现jarconnectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,ActiveMQConnection.DEFAULT_PASSWORD,"tcp://localhost:61616");try {//构造从工厂得到连接对象connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//获取session注意参数值firstQueue在console配置destination = session.createQueue("firstQueue");//消息生成者(发送者)producer = session.createProducer(destination);//不持久化producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//构造消息sendMessage(session, producer);session.commit();} catch (JMSException e) {e.printStackTrace();}finally{try {if(null != connection){connection.close();}}catch(Throwable e) {}}}private static void sendMessage(Session session, MessageProducer producer) throws JMSException {for (int i=1; i<=SEND_NUMBER; i++) {TextMessage message = session.createTextMessage("ActiveMq发送消息:" + i);//发送消息到目的地方System.out.println("发送消息:" + "ActiveMq发送的消息" + i);producer.send(message);}}}
5、启动测试
先启动接收者,后启动发送者(是不是类似socket通讯)
日志如下:
6、大致流程图
7、基于topic (多用于广播)
首先创建topic
修改代码:try{} 中的代码
注意:修改topic变量为 Topic topic
发送者 :注意创建session 第一个参数为false,那么session.commit()去掉。因为不是事务提交
//构造从工厂得到连接对象connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session注意参数值firstTopic在console配置topic = session.createTopic("firstTopic");//消息生成者(发送者)producer = session.createProducer(topic);//不持久化producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//构造消息sendMessage(session, producer);
//从工厂得到连接对象connection = connectionFactory.createConnection();//启动connection.start();//获取操作连接session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);//获取session注意参数firstTopic是在console进行配置的topic = session.createTopic("firstTopic");consumer = session.createConsumer(topic);while (true) {//设置接收者接受消息的时间,设置100sTextMessage message = (TextMessage) consumer.receive(100000);if(null != message){System.out.println("收到消息" + message.getText());}else {break;}}
结果和queue是一样的。
参考引用:
http://www.cnblogs.com/xwdreamer/archive/2012/02/21/2360818.html
阅读全文
0 0
- activemq入门基于queue和基于topic的demo
- ActiveMQ Queue和Topic
- topic 和queue的区别和应用 activeMQ
- JMS 服务器ActiveMQ Queue和Topic区别
- ActiveMQ定时删除过期Topic和Queue
- 基于maven的Spring+ActiveMQ整合Demo
- ActiveMQ中Queue与Topic的比较
- ActiveMQ的Queue与Topic区别
- activemq: jms api实现queue和topic生产者、消费者demo及spring api 实现queue生产者、消费者
- queue和topic的区别
- ActiveMQ的queue和topic两种模式的示例演示
- QX项目实战-8.ActiveMQ的Queue消息和Topic消息
- 95. Spring Boot之ActiveMQ的topic和queue【从零开始学Spring Boot】
- 基于ActiveMQ的Topic的数据同步——初步实现
- 基于ActiveMQ的Topic的数据同步——消费者持久化
- ActiveMq中Queue与Topic的简单分析
- ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
- 基于nodejs和activeMQ的消息推送
- 初次使用Python脚本,proto协议文件转Lua代码
- 重新定位svn地址的方法
- 异或方程组
- 欢迎使用CSDN-markdown编辑器
- window.location.href不跳转问题
- activemq入门基于queue和基于topic的demo
- 判断磁盘/U盘 是否 被写保护
- 分布式事务解决方案一之:可靠消息最终一致性
- IRremote类库中涉及的Container for received IR codes
- JS实现div不停旋转代码
- Selection (opentrains)
- git报错--RPC failed; curl 18 transfer closed with outstanding read data remaining
- js小数转换百分数
- 排序功能的实现