ActiveMQ实现消息的发送与接受
activemq是apache的一个JMS接口的实现产品,java中定义了JMS规范,虽然RocketMQ,kafka现在比较火,但是还是建议先学一下activeMQ再学其他两个就容易很多
首先可以下载压缩包,linux中,Windows中都可以,个人建议linux,目录结构
直接在bin下面运行:
然后进入管控台,默认用户密码是admin,admin,可以在配置文件里进行配置:
,开启之后新建maven项目,添加mq依赖,这时候就可以实现消息发送和接受了:
先说一下代码中用到的对象:
activeMQ是严格实现了JMS规范的,所以代码中也就是这些接口的实现
发送消息端:
//发送消息
public class Sender {
public static void main(String[] args) throws JMSException {
//1 创建ConnectionFactory工厂, 用户名 密码 连接url
// 如果添加了安全机制,只有用有认证的用户去发送或者接受
ConnectionFactory factory = new ActiveMQConnectionFactory(
"houzheng",//默认的用户
"houzheng",
"tcp://localhost:61616" //默认端口: 61616
);
//2 创建连接,并开启,默认是关闭的,并且完成后要关闭连接
Connection connection = factory.createConnection();
connection.start();
//3 创建session 参数: 是否启用事务 选择签收模式(自动签收,客户端签收,不确认是否成功签收(消息可能崇重复))
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//4 创建Destination对象, 参数: 指定消息队列名称
//Destination指的是消息的目的地或者消费来源,TPT模式中成为Queue,订阅/发布中称为主题
Destination destination=session.createQueue("myqueue");
//5 通过session对象创建消息的发送者或者接受者
MessageProducer producer = session.createProducer(destination);//传入Destination
//6 可以设置持久化或者非持久化
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//7 发送消息并关闭连接,可发送多种定义格式的消息
for (int i = 0; i < 5; i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("我是第"+i+"条消息");
producer.send(textMessage);
}
//如果开启了事务,则必须要提交才能全部发送到服务器
//session.commit();
if(connection!=null)connection.close();
}
}
这里我使用了自己配置的用户,使用了安全机制,即只有我认证的用户才能发送或者接受消息,当然也可以使用默认的用户,不过不要加安全验证,加了就必须使用验证通过的
接受消息端:
//消费者
public class Receiver {
public static void main(String[] args) throws JMSException {
//1 创建ConnectionFactory工厂, 用户名 密码 连接url
ConnectionFactory factory = new ActiveMQConnectionFactory(
"houzheng",//默认的用户
"houzheng",
"tcp://localhost:61616" //默认端口: 61616
);
//2 创建连接,并开启,默认是关闭的,并且完成后要关闭连接
Connection connection = factory.createConnection();
connection.start();
//3 创建session 参数: 是否启用事务 选择签收模式(自动签收,客户端签收,不确认是否成功签收(消息可能崇重复))
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//4 创建Destination对象, 参数: 指定消息队列名称
//Destination指的是消息的目的地或者消费来源,TPT模式中成为Queue,订阅/发布中称为主题
Destination destination=session.createQueue("myqueue");//必须和生产者指定的queue一样
//5 通过session对象创建消息的发送者或者接受者
MessageConsumer consumer = session.createConsumer(destination);//传入Destination
//6 接受消息
while(true){
TextMessage message = (TextMessage) consumer.receive();//阻塞接受,还可以指定等待时间或者不阻塞接受,没有就跳过
if(message==null)break;
System.out.println(message.getText());
}
if(connection!=null)connection.close();//关闭连接
}
}
发送消息并消费之后就可以去管控台查看消息队列,这里只是PTP模式的
或者也可以进行持久化到mysql中,直接去数据库中查询,不过还是使用默认的kahadb或者leveldb这种内存数据存储性能比较好,mysql 可能比较直观看到!
ActiveMQ实现消息的发送与接受的更多相关文章
- ActiveMQ 实现消息接收发送
一.接收者 package com.demo.initservice; import javax.jms.Connection; import javax.jms.ConnectionFactory; ...
- ActiveMQ消息的发送原理
持久化消息和非持久化消息的发送策略:消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...
- ACtiveMQ中间件-消息的接收和发送
一.发送消息基本步骤 (1)启动ActiveMQ的的activemq.bat批处理文件或BrokerService节点 (2)创建连接使用的工厂类ActiveMQConnectionFactory通过 ...
- 【转载】java实现rabbitmq消息的发送接受
原文地址:http://blog.csdn.net/sdyy321/article/details/9241445 本文不介绍amqp和rabbitmq相关知识,请自行网上查阅 本文是基于spring ...
- ActiveMQ发消息和收消息
来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...
- 消息中间件--ActiveMQ&JMS消息服务
### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信 --------- ...
- ActiveMQ的消息确认问题
http://riddickbryant.iteye.com/blog/441890 [发送端] session = connection.createSession(Boolean.FALSE, ...
- ActiveMQ之消息指针
消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法.消息中间件的实现一般都是当消费者准备好消费消息的时候,它会从持久化存储中一批一批的读取 ...
- 使用Java语言开发微信公众平台(四)——图文消息的发送与响应
在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...
随机推荐
- java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
java 重写你可以这么理解 因为 方法名和参数类型个数相同 所以这就是重写了 然后 因为是重写 所以 返回值必须相同
- LOJ #143. 质数判定
题目描述 判定输入的数是不是质数. 输入格式 若干行,一行一个数 x. 行数不超过 1.5×104. 输出格式 对于输入的每一行,如果 x 是质数输出一行 Y,否则输出一行 N. 样例 样例输入 ...
- (待修莫队 没过! 抽空在检查)Dynamic len(set(a[L:R])) UVA - 12345
#include <iostream> #include <cstdio> #include <sstream> #include <cstring> ...
- [洛谷P3175][HAOI2015]按位或
题目大意:刚开始有一个数$x=0$,每秒钟有一个数$y\in[0,2^n)(n\leqslant20)$按一定概率随机出现,数$i$的概率为$p_i$,保证$\sum\limits_{i=0}^{2^ ...
- 51nod 1571 最近等对 | 线段树 离线
51nod 1571 最近等对 题面 现在有一个序列 a1, a2, ..., an ,还有m个查询 lj, rj (1 ≤ lj ≤ rj ≤ n) .对于每一个查询,请找出距离最近的两个元素 ax ...
- Java的I/O系统
1.File类 File类既能代表一个特定文件的名称,又能代表一个目录下的一组文件的名称. 如果我们调用不带参数的list()方法,便可以获得此File对象包含的全部列表.然而,如果我们想获得一个受限 ...
- 解题:洛谷4721 [模板]分治FFT
题面 这是CDQ入门题,不要被题目名骗了,这核心根本不在不在FFT上啊=.= 因为后面的项的计算依赖于前面的项,不能直接FFT.所以用CDQ的思想,算出前面然后考虑给后面的贡献 #include< ...
- Lnmp上安装Yaf学习(二)
上一节主要实践了在Lnmp上安装Yaf扩展,那么这一节将测试 Yaf 的一个简单demo的运行. 一.通过Lnmp 创建 vhost 文件 [root@localhost yaf-3.0.6]# ln ...
- js正则取出一个字符串小括号中的内容
var aa="ldfjsldfj(dsfasjfj3124123)"; var result = aa.match(/\(([^)]*)\)/); // 此时result=[&q ...
- python学习笔记__反射
反射 # 通过字符串的形式对对象中的成员进行操作(获取/查找/添加/删除). 操作的内置函数: 1.获取 getattr(object, name) # 去对象object中获取name的内容 c ...