生餐者:

package clc.active.listener;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.testng.annotations.Test; import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import java.util.Random; /**
* ClassName: ObjectProducer<br/>
* Description: <br/>
* date: 2019/1/15 3:25 PM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class ObjectProducer {
@Test
public void sendMessage() {
ConnectionFactory factory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageProducer producer = null;
Message message = null; try {
factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://2.2.2.4:61616");
connection = factory.createConnection();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
destination = session.createQueue("test-listener");
producer = session.createProducer(destination);
connection.start();
Random r = new Random();
for (int i = 0; i < 100; i++) {
Integer data = i;
message = session.createObjectMessage(data);
producer.send(message);
} } catch (Exception e) {
e.printStackTrace();
} finally {
// 回收资源
//消息发送者
if (producer != null) {
try {
producer.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//会话对象
if (session != null) {
try {
session.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//连接对象
if (connection != null) {
try {
connection.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
} } }

消费者:

package clc.active.listener;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.testng.annotations.Test; import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import java.util.Random; /**
* ClassName: ConsumerListener<br/>
* Description: <br/>
* date: 2019/1/15 3:25 PM<br/>
*
* @author chengluchao
* @since JDK 1.8
*/ public class ConsumerListener { @Test
public void consumMessage() {
ConnectionFactory factory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer consumer = null; try {
factory = new ActiveMQConnectionFactory("admin", "admin", "tcp://2.2.2.4:61616");
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//客户端确认
destination = session.createQueue("test-listener");
consumer = session.createConsumer(destination);
//注册监听器,注册成功后,队列中的消息变化,会自动触发监听器代码
consumer.setMessageListener(new MessageListener() {
/*
监听器一旦注册,永久有效
永久 - consumer线程不关闭
处理消息的方式:只要有消息未处理,自动调用onMessage方法,处理消息
监听器可以注册若干。注册多个监听器,相当于集群
ActiveMQ自动的循环调用多个监听器,处理队列中的消息,并实现处理 处理消息的方法,就是监听方法
*/
@Override
public void onMessage(Message message) {
try {
//acknowledge方法,就是确认方法,代表consumer已经收到消息,确认后,MQ可以删除对应的消息
message.acknowledge();
ObjectMessage om = (ObjectMessage) message;
Object data = om.getObject();
System.out.println(data);
} catch (JMSException e) {
e.getErrorCode();
} }
});
//阻塞当前代码,保证listener代码结束,如果代码结束了,监听器自动关闭
System.in.read();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 回收资源 if (consumer != null) {
try {
consumer.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//会话对象
if (session != null) {
try {
session.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
//连接对象
if (connection != null) {
try {
connection.close();
} catch (JMSException jmse) {
jmse.printStackTrace();
}
}
}
} }

ActiveMQ P2P模型 观察者消费的更多相关文章

  1. ActiveMQ 入门使用p2p模型-主动消费

    生产者 package clc.active; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XmlVisitor; import ...

  2. Laravel 5.1 中如何使用模型观察者

    有时候我们需要在一个表更改后,触发某个事件,最常见的比如,首页推荐商品 1 更改了,需要清空所有首页商品缓存. 首先我们需要在建立一个观察者类,比如 App\Model\Observers\Proje ...

  3. 计算机网络之应用层概述(C/S模型与p2p模型)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105582318 学习课程:<2019王道考研计算机网络> 学习目的 ...

  4. ActiveMQ P2P版的HelloWorld

    1.2 JMS应用程序接口 ConnectionFactory: 用户用来创建到JMS提供者的连接的被管对象.JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改. 管理员 ...

  5. activemq p2p方式

    package ch02.chat; import java.io.Serializable; import javax.jms.Connection; import javax.jms.Connec ...

  6. ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型

    1. 面向消息的中间件 1.1 什么是MOM 面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流 ...

  7. ActiveMQ的发布者/订阅者模型示例

    ActiveMQ的发布者/订阅者模型入门示例 (1)下载安装activemq,启动activeMQ. 详细步骤参考博客:http://www.cnblogs.com/DFX339/p/9050878. ...

  8. Kafka消息模型

    一.消息传递模型 传统的消息队列最少提供两种消息模型,一种P2P,一种PUB/SUB,而Kafka并没有这么做,巧妙的,它提供了一个消费者组的概念,一个消息可以被多个消费者组消费,但是只能被一个消费者 ...

  9. ActiveMQ基本配置与示例演示

    一.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 二.运行ActiveMQ 将apache-activemq-5.11.1-bin.zip解压,由于本系 ...

随机推荐

  1. docker管理工具推荐(linux和windows)

    1.windows. 下载dokcer toolbox即可 2.linux 推荐rancher.安装链接参考:http://www.kaimingwan.com/post/rong-qi-yu-ron ...

  2. Failed building wheel for Twisted

    在安装scrapy框架的过程中,pip install scrapy 出现报错信息: building 'twisted.test.raiser' extension error: Microsoft ...

  3. Hubtown

    Hubtown 时间限制: 10 Sec  内存限制: 256 MB 题目描述 Hubtown is a large Nordic city which is home to n citizens. ...

  4. Idea其他设置

    一.生成javadoc Tools->Gerenate JavaDoc 1. 选择是整个项目还是模块还是单个文件 2. 文档输出路径 3. Locale 选择地区,这个决定了文档的语言,中文就是 ...

  5. Netty和Akka有什么不同?

    摘要: Akka is a concurrency framework built around the notion of actors and composable futures, Akka w ...

  6. [NOIP2012T3]开车旅行

    题目描述 NOIP 2012 提高组 题3小 A 和小 B 决定利用假期外出旅行,他们将想去的城市从 1 到 N 编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市 ...

  7. 深究Spring中Bean的生命周期

    前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...

  8. MySql 初始化权限脚本

    刚装好MySql后无法用客户端工具连接,通过命令行登录后,运行下面的脚本: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'     IDENTIFIED BY 'y ...

  9. 如何使用NSOperations和NSOperationQueues 第二部分

    这篇文章还可以在这里找到 英语 以下是对上面代码的注解: 导入PhotoRecord.h文件,这样你就可以在下载成功后,单独地设置PhotoRecord变量的图片属性(image property). ...

  10. ubuntu uninstall postgres

    Steps that worked for me on Ubuntu 8.04.2 to remove postgres 8.3 List All Postgres related packages ...