消息系统-ActiveMq & JMS

ActiveMQ消息系统介绍与使用示例
本文介绍了分布式系统中消息系统的作用,如降低耦合度、提升效率等。重点介绍了开源消息系统ActiveMQ,它采用Java实现,支持JMS规范及多种消息类型和发送模式。还给出了安装步骤、配置说明,以及基于queue的点对点消息发送和接收的代码示例。

在分布式系统中,消息系统的应用十分的广泛,消息可以作为应用通信的一种方式。消息被保存在队列中,直到被消息接受者取出,由于消息发送者不需要同步等待消息接收者的响应,异步的接收降低了系统集成的耦合度,提升了系统协作效率提高了系统吞吐量。分布式消息队列还可以作为缓冲,缓解集群压力。

ActiveMQ是apache的一个开源消息系统, 完全采用java实现,能够很好的支持JMS规范

Jms支持消息类型包括简单的文本(TextMessage)、可序列化对象(ObjectMessage)、键值对(MapMessage)、字节流(BytesMessage)、流(StreamMessage),

Jms支持两种消息的发送一种是P2P 点对点另一种是publish/subscribe (发布/订阅)

p2p模型是基于queue(队列)的,消息生产者发送消息到队列消息消费者从队列中接受消息。

publish/subscribe 定义了如何向一个内容节点发布和订阅消息,这个内容节点被称为topic(主题)主题可以认为是消息传递的中介

消息发部者将消息发布到主题上,而消息订阅者从主题订阅消息,主题使得消息的订阅者与消息的发布者互相保持独立,不需要进行接触即可保证消息的传递,发布/订阅模型在消息的一对多广播时候采用。

安装ActiveMQ

wget http://apache.dataguru.cn/activemq/apache-activemq/5.9.0/apache-activemq-5.9.0-bin.tar.gz

解压安装软件:

tar -xf apache-activemq-5.9.0-bin.tar.gz

相关的配置放在{ACTIVEMQ_HOME}/conf 目录下,可以对配置文件进行修改:

ls   /usr/activemq

启动

./activemq start

ActiveMq 实现了JMS规范提供的一系列接口,如创建Session、建立连接,发送消息等通过这些接口能够实现消息发送、消息接收、消息发布、消息订阅的功能

使用JMS来完成ActiveMQ 基于queue的点对点消息发送

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFUT_USER,ActiveMQConnection.DEFAULT_PASSWORD,tcp://192.168.136.135:61616)

Connection connection  = connectionFactory.createConnection();

connection.start();

Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWEDGE)

DEStination destination = session.createQueue("MessageQueue")

MessageProducer producer = session.createProducer(destination);

producer.setDeliverMode(DeliveryMode.NON_PERSISTENT);

objectMessage message =session.createObjectMessage("hello everyone!")

producer.send(message);

session.commit();

创建一个ActiveMQConnectionFactory通过ActiveMQConnectionFactory来创建到ActiveMQ的连接通过连接创建Session

创建Session时有两个非常重要的参数,第一个boolean类型的参数用来表示是否采用事物消息。如果消息是事务的,对应的该参数设置为true。此时消息的提交自动由comit处理,消息的回滚自动由rollback处理。假如消息不是事物的。则对应的参数应该设置成false

queue 的点对点接收:

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAUT_USER,ActiveMQConnection.DEFAULT_PASSWORD,

"tcp//192.168.110.111:61616;");

Connection connection = connectionFactory.createConnection();

connection.start();

Session session = connection.createSession(Boolean.False,Session.AUTO_ACKNOWLEDE);

Destination destinaation =session.createQueue("MessageQueue")

MessageConsumer consumer = session.createConsumer(destination);

while(true){

 ObjectMessage message =(ObjectMeaage)consumer.receive(10000);

if(null!=message){

String messageContent =message.getObject();

System.out.pritnln(messageContent);

}else{

break;

}

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值