MQ学习(三)--- 订阅模式
来源:互联网 发布:telent 端口 编辑:程序博客网 时间:2024/05/16 10:23
消息发布者代码:
package com.java1234.activemq2;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
*消息发布者
* @author ALWZ
*
*/
public class JMSProducer {
private static final String USERNAME =ActiveMQConnection.DEFAULT_USER;//使用默认用户名
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;//使用默认密码
private static final String BROKEURL =ActiveMQConnection.DEFAULT_BROKER_URL;//使用默认本地连接
private static final int SENDNUM =10;//发送消息的数量
public static void main(String[] args){
ConnectionFactory connectionFactory;//连接工厂
Connection connection=null;//连接
Session session;//会话 接收或者发送消息的线程
Destination destination;//消息的目的地
MessageProducer messageProducer;//消息生产者
//实例化连接工厂
connectionFactory=new ActiveMQConnectionFactory(JMSProducer.USERNAME,JMSProducer.PASSWORD,JMSProducer.BROKEURL);
try {
connection=connectionFactory.createConnection();//通过连接工程获取连接
connection.start();//启动连接
session=connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);//创建session
destination=session.createTopic("FirstTopic1");//创建消息会话
messageProducer=session.createProducer(destination);//创建消息生产者
sendMessage(session, messageProducer);//发送消息
session.commit();
} catch (JMSException e) {
e.printStackTrace();
}finally{
if (connection!=null) {
try {
connection.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
/**
*发送消息
* @param session
* @param messageProducer
* @throws JMSException
*/
public static void sendMessage(Session session,MessageProducer messageProducer) throws JMSException{
for (int i = 0; i < JMSProducer.SENDNUM; i++) {
TextMessage message =session.createTextMessage("ActiveMQ发送的消息"+i);//创建消息
System.out.println("发布的消息:"+"ActiveMQ发布的消息"+i);
messageProducer.send(message);//发送消息
}
}
}
消息订阅者和监听器:
package com.java1234.activemq;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
*消息消费者
* @author ALWZ
*
*/
public class JMSConsumer2 {
private static final String USERNAME =ActiveMQConnection.DEFAULT_USER;//使用默认用户名
private static final String PASSWORD =ActiveMQConnection.DEFAULT_PASSWORD;//使用默认密码
private static final String BROKEURL =ActiveMQConnection.DEFAULT_BROKER_URL;//使用默认本地连接
public static void main(String[] args){
ConnectionFactory connectionFactory;//连接工厂
Connection connection=null;//连接
Session session;//会话 接收或者发送消息的线程
Destination destination;//消息的目的地
MessageConsumer messageConsumer;//消息的消费者
//实例化连接工厂
connectionFactory=new ActiveMQConnectionFactory(JMSConsumer2.USERNAME,
JMSConsumer2.PASSWORD,JMSConsumer2.BROKEURL);
try {
connection=connectionFactory.createConnection();//通过连接工厂获取连接
connection.start();//启动连接
session=connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
destination=session.createTopic("FirstTopic1");//创建消息订阅者
messageConsumer=session.createConsumer(destination);//创建消息消费者
//注册消息监听,如果两个订阅者,就会有两个监听者,
//这里括号里面的代码就会一个对应一个的写
messageConsumer.setMessageListener(new Listener());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
package com.java1234.activemq2;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;
/**
*消息监听--订阅者的监听
* @author ALWZ
*
*/
public class Listener implements MessageListener{
@Override
public void onMessage(Message message) {
try {
System.out.println("订阅者收到的消息:"+((TextMessage)message).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
这里启动的时候得注意:必须得先启动订阅者,再启动发布者。只有订阅之后才可以收到消息。
如果有两个订阅者的话:运行显示:
- MQ学习(三)--- 订阅模式
- ActiveMQ学习(三)——MQ的通讯模式
- ActiveMQ学习(三)——MQ的通讯模式
- ActiveMQ学习(三)——MQ的通讯模式
- active mq 多个消费者实战(发布订阅模式)
- 学习MQ(三) 一个实例
- MQ学习(二)--- 点对点模式
- Rabbitmq 学习笔记(三)发布订阅
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- 消息队列-ActiveMQ学习笔记(三)-发布-订阅消息模式实现
- 设计模式(三)观察者模式Observer(发布订阅)
- 快速上手MQ之activeMQ(3)--订阅者模式
- MQ学习(四)--- 与spring整合(点对点模式)
- RabbitMQ学习(三)之发布/订阅(java)
- 设计模式(三):观察者模式与发布/订阅模式区别
- zmq三种消息订阅模式
- MQ集群方式订阅消息
- RabbitMQ (三) 发布/订阅
- 【Java多线程】CAS算法
- UI工具包Xamarin.Forms更新至v2.3.5-pre3,与.NET Standard项目兼容
- TCP握手和挥手
- mysql5.5源码编译安装
- Redis 订阅发布
- MQ学习(三)--- 订阅模式
- 安卓高德地图API根据城市名获取对应的经纬度和地理编码
- centos 6.5的中文切换为英文!
- NDK学习之增量更新--合并APK
- FAFU OJ 依旧水水的dp3
- 消息队列设计精要
- 在Activity中直接new Intent()报错:NullPointerException
- ubuntu 16.04 安装umbrello
- windows安装solr