订阅模式(publish-subscribe)
来源:互联网 发布:淘宝纸箱设备 编辑:程序博客网 时间:2024/05/18 02:05
SendTopic(发送端)
package topic;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.DeliveryMode;import javax.jms.Destination;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory; public class SendTopic { private static final int SEND_NUMBER = 5; public static void sendMessage(Session session, MessageProducer producer) throws Exception { for ( int i = 1; i <= SEND_NUMBER; i++) { TextMessage message = session .createTextMessage("ActiveMq发送的消息" + i); //发送消息到目的地方 System. out.println("发送消息:" + "ActiveMq 发送的消息" + i); producer.send(message); } } public static void main(String[] args) { // ConnectionFactory:连接工厂,JMS用它创建连接 ConnectionFactory connectionFactory; // Connection:JMS客户端到JMS Provider的连接 Connection connection = null; // Session:一个发送或接收消息的线程 Session session; // Destination:消息的目的地;消息发送给谁. Destination destination; // MessageProducer:消息发送者 MessageProducer producer; // TextMessage message; //构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection. DEFAULT_USER, ActiveMQConnection. DEFAULT_PASSWORD, "tcp://localhost:61616"); try { //构造从工厂得到连接对象 connection = connectionFactory.createConnection(); //启动 connection.start(); //获取操作连接 session = connection.createSession( true, Session. AUTO_ACKNOWLEDGE); //获取session注意参数值FirstTopic是一个服务器的topic(与queue消息的发送相比,这里是唯一的不同) destination = session.createTopic("FirstTopic"); //得到消息生成者【发送者】 producer = session.createProducer(destination); //设置不持久化,此处学习,实际根据项目决定 producer.setDeliveryMode(DeliveryMode. PERSISTENT); //构造消息,此处写死,项目就是参数,或者方法获取 sendMessage(session, producer); session.commit(); } catch (Exception e) { e.printStackTrace(); } finally { try { if ( null != connection) connection.close(); } catch (Throwable ignore) { } } }}
ReceiveTopic(消费端)
package topic;import javax.jms.Connection;import javax.jms.ConnectionFactory;import javax.jms.Destination;import javax.jms.MessageConsumer;import javax.jms.Session;import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnection;import org.apache.activemq.ActiveMQConnectionFactory;public class ReceiveTopic implements Runnable { private String threadName; ReceiveTopic(String threadName) { this.threadName = threadName; } public void run() { // ConnectionFactory:连接工厂,JMS用它创建连接 ConnectionFactory connectionFactory; // Connection:JMS客户端到JMS Provider的连接 Connection connection = null; // Session:一个发送或接收消息的线程 Session session; // Destination:消息的目的地;消息发送给谁. Destination destination; //消费者,消息接收者 MessageConsumer consumer; connectionFactory = new ActiveMQConnectionFactory( ActiveMQConnection. DEFAULT_USER, ActiveMQConnection. DEFAULT_PASSWORD,"tcp://localhost:61616"); try { //构造从工厂得到连接对象 connection = connectionFactory.createConnection(); //启动 connection.start(); //获取操作连接,默认自动向服务器发送接收成功的响应 session = connection.createSession( false, Session. AUTO_ACKNOWLEDGE); //获取session注意参数值FirstTopic是一个服务器的topic destination = session.createTopic("FirstTopic"); consumer = session.createConsumer(destination); while ( true) { //设置接收者接收消息的时间,为了便于测试,这里设定为100s TextMessage message = (TextMessage) consumer .receive(100 * 1000); if ( null != message) { System. out.println("线程"+threadName+"收到消息:" + message.getText()); } else { continue; } } } catch (Exception e) { e.printStackTrace(); } finally { try { if ( null != connection) connection.close(); } catch (Throwable ignore) { } } } public static void main(String[] args) { //这里启动3个线程来监听FirstTopic的消息,与queue的方式不一样三个线程都能收到同样的消息 ReceiveTopic receive1= new ReceiveTopic("thread1"); ReceiveTopic receive2= new ReceiveTopic("thread2"); ReceiveTopic receive3= new ReceiveTopic("thread3"); Thread thread1= new Thread(receive1); Thread thread2= new Thread(receive2); Thread thread3= new Thread(receive3); thread1.start(); thread2.start(); thread3.start(); }}
所需包
效果
1 0
- 订阅模式(publish-subscribe)
- 订阅发布模式(Subscribe/Publish)
- 订阅发布模式(Subscribe/Publish)
- 订阅(publish-subscribe) demo
- 设计模式---订阅发布模式(Subscribe/Publish)
- 设计模式---订阅发布模式(Subscribe/Publish)
- ActiveMQ 发布订阅(publish-subscribe)
- RabbitMQ 基础教程 Publish/Subscribe(发布/订阅)
- RabbitMQ --- Publish-Subscribe(发布-订阅)
- RabbitMQ --- Publish-Subscribe(发布-订阅)
- Publish Subscribe Channel 订阅
- 设计模式之观察者模式(发布-订阅模式publish/Subscribe)
- 观察者模式(Observer Pattern,对象行为型模式,发布-订阅模式 Publish/Subscribe Pattern)
- [设计模式] 观察者模式(发布-订阅/Publish-subscribe模式)
- RabbitMQ消息分发模式----"Publish/Subscribe"发布/订阅模式
- (四) RabbitMQ消息分发模式----"Publish/Subscribe"发布/订阅模式
- RabbitMQ消息分发模式----"Publish/Subscribe"发布/订阅模式
- ZeroMQ之模式二 发布者订阅者(publish-subscribe)
- C#点击只打开一个窗体
- Cocos2d-Lua之函数
- uname命令的使用方法
- Akka学习笔记:Actor消息传递(1)
- 【leetcode】232. Implement Queue using Stacks
- 订阅模式(publish-subscribe)
- linux 容器(LXC) 第1章 LXC 简介
- vue 学习记录
- struts form样式怎么修改
- JAVA I/O流
- linux 容器(LXC) 第2章 chroot
- Linux下查看文件和文件夹大小
- 如何给UIView等控件用xib设置圆角属性
- 图像平滑