前面我们已经搭建和配置好了ActiveMQ,下面来看一个Demo,体验一下MQ。
JMS 消息模型
JMS消息服务应用程序结构支持两种模型:点对点模型,发布者/订阅者模型。
(1)点对点模型(Queue)
一个生产者向一个特定的队列发布消息,一个消费者从这个队列中依次读取消息。
模型特点:只有一个消费者获得消息。
(2)发布者/订阅者模型(Topic)
0个或多个订阅者可以接受特定主题的消息。
模型特点:多个消费者可获得消息。
Topic和Queue的最大区别在于Topic是以广播的形式,通知所有在线监听的客户端有新的消息,没有监听的客户端将收不到消息;而Queue则是以点对点的形式通知多个处于监听状态的客户端中的一个。
JMS消息格式
MapMessage -- key-value键值对
TextMessage -- 字符串对象
ObjcetMessage -- 一个序列化的Java对象
ByteMessage -- 一个未解释字节的数据流
StreamMessage -- Java原始值的数据流
点对点模型Demo
public classConstants {public static final String MQ_NAME = "parry";public static final String MQ_PASSWORD = "parry123";public static final String MQ_BROKETURL = "tcp://192.168.56.129:61616";
}
importjavax.jms.Connection;importjavax.jms.ConnectionFactory;importjavax.jms.Destination;importjavax.jms.JMSException;importjavax.jms.MessageProducer;importjavax.jms.Session;importjavax.jms.TextMessage;importorg.apache.activemq.ActiveMQConnectionFactory;importcom.parry.demo.constant.Constants;/***
*
* MSProduct 点对点模型-消息生产者
*
*/
public classMSProduct {public static voidmain(String[] args) {//连接工厂
ConnectionFactory factory;//连接实例
Connection connection = null;//收发的线程实例
Session session;//消息发送目标地址
Destination destination;//消息创建者
MessageProducer messageProducer;try{
factory= newActiveMQConnectionFactory(Constants.MQ_NAME, Constants.MQ_PASSWORD,
Constants.MQ_BROKETURL);//获取连接实例
connection =factory.createConnection();//启动连接
connection.start();//创建接收或发送的线程实例(创建session的时候定义是否要启用事务,且事务类型是Auto_ACKNOWLEDGE也就是消费者成功在Listern中获得消息返回时,会话自动确定用户收到