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. Java词频统计

    public class WordCount { public static void main(String[] args) { String[] stopWords = { "" ...

  2. C# 抽签小程序

    设计背景 设置一个Excel名单表,对名单进行随机抽取. 设计思路 使用Timer定时器,运行定时器进行名单随机滚动,停止定时器获得抽签结果 相关技术 随机数 Excel读取/导出 XML文档读写 相 ...

  3. .Net iTextSharp 生成pdf

    拿别人例子 public ActionResult index() { var ms = new MemoryStream(); #region CreatePDF Document document ...

  4. MT【143】统一分母

    已知$a,b>0$,则$m=\dfrac{b^2+2}{a+b}+\dfrac{a^2}{ab+1}$的最小值是______ 解答: $$m\geqslant \dfrac{b^2+2}{\sq ...

  5. UltraISO制作U盘启动盘

    第一步:导入镜像文件 文件->打开 第二步: 启动->写入硬盘映像 隐藏启动分区选择“无” 然后等待即可.

  6. tokenizer

    http://blog.csdn.net/beyond__devil/article/details/52829241

  7. 关于未来IT职业教育的思考

    回首过去20年的IT教育,从基本的办公软件(应用软件)到基础设施培训(网络.ps.3d等)再到软件开发(java等),可以说是见证了中国计算机发展的整个阶段,随着时代的变迁,计算机从最初的普及阶段到深 ...

  8. String,static,final

    1. String 下面代码创建了几个对象? String s1 = new String("Hello"); String s2 = new String("Hello ...

  9. Android中的Surface, SurfaceHolder, SurfaceHolder.Callback, SurfaceView

    传入一个surface,然后让openGL在surface上画图 window->view hierachy(DecorView是tree的root)->ViewRoot->Surf ...

  10. 【DSU on tree】【CF741D】Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths

    Description 给定一棵 \(n\) 个节点的树,每条边上有一个字符,字符集大小 \(22\),求每个节点的子树内最长的简单路径使得路径上的字符经过重排后构成回文串. Limitation \ ...