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语言开发微信公众平台(四)——图文消息的发送与响应
在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...
随机推荐
- Nginx在Linux上的安装和配置
链接:http://www.cnblogs.com/wbyp/p/7737224.html
- JVM中各种变量保存位置
Java中变量分为静态变量,实例变量,临时变量.那么各种变量具体保存在JVM中的何处呢? 1 静态变量:位于方法区. 2 实例变量:作为对象的一部分,保存在堆中. 3 临时变量:保存于栈中,栈随线程的 ...
- Wow! Such Doge! HDU - 4847(虽然是道水题 但很有必要记一下)
就是求出现了多少次doge 不区分大小写 巧用字符串函数 isalpha 判断是否是字母 tolower 转换为小写字母 toupper 转换为大写字母 strncmp字符串比较函数 能限制比较的 ...
- 虚拟主机、ECS云服务器、VPS区别汇总
想做一个网站,但是在各种类型的服务器琳琅满目,现在总结一下市场上常见的几种服务器. 1.虚拟主机 虚拟主机就是利用虚拟化的技术,将一台服务器划分出一定大小的空间,每个空间都给予单独的 FTP 权限和 ...
- 如何添加ORACLE 的 ODBC
找到 C:\windows\SysWOW64\odbcad32.exe 新增odbc ,提示 报错忽略,一直点确定就是,会建成功的! 点OK即可.新建完毕
- 【刷题】BZOJ 4530 [Bjoi2014]大融合
Description 小强要在N个孤立的星球上建立起一套通信系统.这套通信系统就是连接N个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够 联通的树上路过它 ...
- 深踩 AndroidStudio 缓存的坑
本文记录的是今天在群里提到的昨天所踩的一个坑,有关 AndroidStudio 缓存的. 先说一下背景. 我负责的一个项目,对一个图表库有外部依赖.这个图表库是我在维护的,由于新功能在开发中,所以我就 ...
- C#基础-代码部署数据库及IIS站点
一.前言 最近忙里偷闲,做了一个部署数据库及IIS网站站点的WPF应用程序工具. 二.内容 此工具的目的是: 根据.sql文件在本机上部署数据库 在本机部署IIS站点,包括 ...
- 洛谷 P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 解题报告
P2915 [USACO08NOV]奶牛混合起来Mixed Up Cows 题意: 给定一个长\(N\)的序列,求满足任意两个相邻元素之间的绝对值之差不超过\(K\)的这个序列的排列有多少个? 范围: ...
- bzoj 2732 射箭 半平面交
2732: [HNOI2012]射箭 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2531 Solved: 848[Submit][Status] ...