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实现消息的发送与接受的更多相关文章

  1. ActiveMQ 实现消息接收发送

    一.接收者 package com.demo.initservice; import javax.jms.Connection; import javax.jms.ConnectionFactory; ...

  2. ActiveMQ消息的发送原理

    持久化消息和非持久化消息的发送策略:消息同步发送和异步发送 ActiveMQ支持同步.异步两种发送模式将消息发送到broker上.同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消 ...

  3. ACtiveMQ中间件-消息的接收和发送

    一.发送消息基本步骤 (1)启动ActiveMQ的的activemq.bat批处理文件或BrokerService节点 (2)创建连接使用的工厂类ActiveMQConnectionFactory通过 ...

  4. 【转载】java实现rabbitmq消息的发送接受

    原文地址:http://blog.csdn.net/sdyy321/article/details/9241445 本文不介绍amqp和rabbitmq相关知识,请自行网上查阅 本文是基于spring ...

  5. ActiveMQ发消息和收消息

    来自:http://blog.163.com/chengwei_1104/blog/static/53645274201382315625329/ ActiveMQ 是Apache出品,最流行的,能力 ...

  6. 消息中间件--ActiveMQ&JMS消息服务

    ### 消息中间件 ### ---------- **消息中间件** 1. 消息中间件的概述 2. 消息中间件的应用场景 * 异步处理 * 应用解耦 * 流量削峰 * 消息通信   --------- ...

  7. ActiveMQ的消息确认问题

    http://riddickbryant.iteye.com/blog/441890 [发送端] session = connection.createSession(Boolean.FALSE,   ...

  8. ActiveMQ之消息指针

    消息指针(Message cursor)是activeMQ里一个非常重要的核心类,它是提供某种优化消息存储的方法.消息中间件的实现一般都是当消费者准备好消费消息的时候,它会从持久化存储中一批一批的读取 ...

  9. 使用Java语言开发微信公众平台(四)——图文消息的发送与响应

    在上一篇文章中,我们实现了被关注回复与关键词回复功能.在用户关注的时候自动推送功能菜单,并根据用户输入的关键词,回复特定信息.但是,我们只能回复文本消息给用户,如何才回复一条图文消息呢?本周,我们一起 ...

随机推荐

  1. HDU4183_Pahom on Water

    题意为给你若干个圆,每个圆的颜色对应一个频率,如果两个圆有公共部分,那么这两个圆之间可以走,你可以从起点开始,从频率小的圆走向频率大的圆并且到达终点后,从频率大的圆走向频率小的圆,最终回到起点,路径中 ...

  2. Android 5.0 Activity切换动画

    在Androiod5.0中,Google定义了Material Design的规范.而动画切换,能给用户直观的连贯性的体验,也是Google推崇的. 为此,在Android5.0中,Android新支 ...

  3. tarjan解决路径询问问题

    好久没更新了,就更一篇普及组内容好了. 首先我们考虑如何用tarjan离线求出lca,伪代码大致如下: def tarjan(x): 将x标记为已访问 for c in x的孩子: tarjan(c) ...

  4. [NOI2014]魔法森林 LCT

    题面 [NOI2014]魔法森林 题解 一条路径的代价为路径上的\(max(a[i]) + max(b[i])\),因为一条边同时有$a[i], b[i]$2种权值,直接处理不好同时兼顾到,所以我们考 ...

  5. AFO NOI2018退役——菜鸡一直是菜鸡

    游记DAY -INF连续几天的模拟让我确信我就是菜鸡.以及相信yxd,sjq,cyl神犇一定能够稳了. DAY 0报道,天很热热热热热热热热热. DAY 1开幕式,杜子德很热热热热热热热热热. DAY ...

  6. 洛谷 P4292 [WC2010]重建计划 解题报告

    P4292 [WC2010]重建计划 题目描述 \(X\)国遭受了地震的重创, 导致全国的交通近乎瘫痪,重建家园的计划迫在眉睫.\(X\)国由\(N\)个城市组成, 重建小组提出,仅需建立\(N-1\ ...

  7. 【uoj131】 NOI2015—品酒大会

    http://uoj.ac/problem/131 (题目链接) 题意 给出一个字符串,每个后缀有一个权值${a_i}$,这些后缀两两之间存在公共前缀.问能够组成长度从0~n-1的公共前缀的后缀的方案 ...

  8. loj6436【PKUSC2018】神仙的游戏

    $|S| \le 5 \times 10^5$ 题解 这题直接用通配符匹配的套路会错,因为重复部分的$?$可能同时被当做了$0$和$1$ 有长度为$i$的公共前缀后缀等价于有长度为$n-i$的循环节: ...

  9. Chapter1(预科)--C++Prime笔记

    心得体会: 因为之前一直在用在学C,因此在看完C++Prime第一章后,就有中在一个培训班中,一个老师用一个简单的项目来带你了解这种语言的特性的感觉.当然这个告诉是在让你脑子固化接受一些点的前提下. ...

  10. Python操作sqlserver 2000

    在网上找到了pyodbc这个模块,本人操作系统是 Ubuntu 16.04 , Python 2.7  已经安装了pip 按照 官方文档 的步骤成功安装. 但是需要跨平台. 使用pyodbc在wind ...