ActiveMQ P2P模型 观察者消费
生餐者:
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模型 观察者消费的更多相关文章
- ActiveMQ 入门使用p2p模型-主动消费
生产者 package clc.active; import com.sun.xml.internal.bind.v2.runtime.unmarshaller.XmlVisitor; import ...
- Laravel 5.1 中如何使用模型观察者
有时候我们需要在一个表更改后,触发某个事件,最常见的比如,首页推荐商品 1 更改了,需要清空所有首页商品缓存. 首先我们需要在建立一个观察者类,比如 App\Model\Observers\Proje ...
- 计算机网络之应用层概述(C/S模型与p2p模型)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105582318 学习课程:<2019王道考研计算机网络> 学习目的 ...
- ActiveMQ P2P版的HelloWorld
1.2 JMS应用程序接口 ConnectionFactory: 用户用来创建到JMS提供者的连接的被管对象.JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改. 管理员 ...
- activemq p2p方式
package ch02.chat; import java.io.Serializable; import javax.jms.Connection; import javax.jms.Connec ...
- ActiveMQ消息队列从入门到实践(1)—JMS的概念和JMS消息模型
1. 面向消息的中间件 1.1 什么是MOM 面向消息的中间件,Message Oriented Middleware,简称MOM,中文简称消息中间件,利用高效可靠的消息传递机制进行平台无关的数据交流 ...
- ActiveMQ的发布者/订阅者模型示例
ActiveMQ的发布者/订阅者模型入门示例 (1)下载安装activemq,启动activeMQ. 详细步骤参考博客:http://www.cnblogs.com/DFX339/p/9050878. ...
- Kafka消息模型
一.消息传递模型 传统的消息队列最少提供两种消息模型,一种P2P,一种PUB/SUB,而Kafka并没有这么做,巧妙的,它提供了一个消费者组的概念,一个消息可以被多个消费者组消费,但是只能被一个消费者 ...
- ActiveMQ基本配置与示例演示
一.下载ActiveMQ 去官方网站下载:http://activemq.apache.org/ 二.运行ActiveMQ 将apache-activemq-5.11.1-bin.zip解压,由于本系 ...
随机推荐
- noip普及组考纲+样题合集——初级篇(OIer必看)
很明显我是想发提高组合集的.普及组考纲……用发么. 当然如果你想看的话也可以,就一点点: 递归.排序…… 很明显上面那都不是重点.普及组只要掌握搜索.二分.单调队列.数学.随机化等等,一等奖没问题的, ...
- R语言入门视频笔记--1
一.数据框简要 可输入来访问mtcars这个系统自带的数据框中的mpg列 mtcars$mpg 或者输入 mtcars[c("mpg","cyl")] 来访问两 ...
- MyBatis的参数,不能传入null
今天在调试的过程中发现一个bug,把传入的参数写到查询分析器中执行没有问题,但是在程序中执行就报错:org.springframework.jdbc.UncategorizedSQLException ...
- js Math [ 随机数、绝对值、四舍五入、进一取整、舍去取整、最大值、最小值、圆周率 ]
<script> /* 数学对象:Math */ with (document) { write('<br>-3.5的绝对值:'+Math.abs(-3.5)); write( ...
- Docker如何部署Python项目
Docker 部署Python项目 作者:白宁超 2019年5月24日09:09:00 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如 ...
- 关于button中设置文字不显示的问题
这个因为使用的image加载方式是setimage而不是setbackgroundimage导致文字始终出不来.
- iOS之中国银联移动支付控件升级的问题
自从11月以来,如果用户安装了集成了中国银联手机支付SDK的app,那么在使用银联支付的时候,会发现,不能调用银联支付方式,并且弹出一个提示”银联手机支付已升级请更新客户端8100010”.如下图: ...
- Python——正則表達式(2)
本文译自官方文档:Regular Expression HOWTO 參考文章:Python--正則表達式(1) 全文下载 :Python正則表達式基础 ======================== ...
- iOS文件的管理(添加,删除,拷贝,移动)
#import "ViewController.h" @implementation ViewController - (void)viewDidLoad { [super vie ...
- stream_context_create()模拟POST/GET
有时候,我们需要在服务器端模拟 POST/GET 等请求,也就是在 PHP 程序中去实现模拟,该怎么做到呢?或者说,在 PHP 程序里,给你一个数组,如何将这个数组 POST/GET 到另外一个地址呢 ...