您的位置:首页 > 运维架构 > Apache

JMS Apache ActiveMQ(消息中间件)使用攻略

2014-09-02 16:24 495 查看
首先在做任何技术预研的时候:我会搞清除它是什么?为什么要使用它?

JMS 它是什么?

Java Message Service是一组接口和相关语义,他定义了JMS客户如何访问企业消息产生的功能。

JMS支持消息中间件的两种传递模式:点到点模式(point to point)和发布-订阅模式(pub/sub)。

JMS消息模型:

消息头(header):JMS消息头包含了许多字段,它们是消息发送后由JMS提供者或消息发送者产生,用来表示消息、设置优先权和失效时间等等,并且为消息确定路由。

属性(property):由消息发送者产生,用来添加删除消息头以外的附加信息。

消息体(body):由消息发送者产生,JMS中定义了5种消息体:ByteMessage、MapMessage、ObjectMessage、StreamMessage和TextMessage。

为什么要使用JMS?

消息是一个分布式的低耦合通讯方案,生产者A发送一个消息到agent,消费者B去agent上获取消息,但是A,B不需要同时到agent上去注册,agent提供高效率的通讯服务。
安全。因为AB不关联,使得其中一方的重启、退出等不至于影响到另一方。
对消息的完整性判断,消息不需要遵照严格的事物要求,可以丢失。
目前我所接触的系统大都是每人开发一个模块,然后用HTTP接口访问。有多个用户注册的入口,用户注册事件也分配到不同的代码里,看起来相当的不舒服,所以决定用JMS来处理事件触发后的逻辑,降低系统的耦合,也方便开发修改代码。

ActiveMQ的安装以及配置,这里就不多做介绍了,大家可以网上查找资料搞定。
下面是ActiveMQ与Spring集合时的配置文件:

<?xml version="1.0" encoding="UTF-8"?>


3. 消息监听处理类(消费者):

import javax.annotation.Resource;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.stereotype.Component;

import com.getop.sales.service.JmsBusinessService;

/**
*@ClassName: TopicReceiver
*@Description: 消息监听器,注意要实现MessageListener
*/
@Component
public class TopicReceiver implements MessageListener {

// service接口
@Resource
private JmsBusinessService jmsBusinessService;

// 重写onMessage方法
@Override
public void onMessage(Message message) {

try {
System.out.println("TopicReceiver接收到消息:" + ((TextMessage) message).getText());
boolean financialFlag = false;
boolean loanFlag = false;
// 当消息体为:TextMessage 做出的操作
if (message instanceof TextMessage) {

// 理财客户
financialFlag = jmsBusinessService.modifyFinancialUserByTypes(((TextMessage) message).getText());
if (financialFlag)
System.out.println("理财客户状态->有效->已更改为:待分配.");

// 个贷客户 + Follow、newFollowUserId
loanFlag = jmsBusinessService.modifyLoanUserByTypes(((TextMessage) message).getText());
if (loanFlag)
System.out.println("个贷客户状态->有效->已更改为:待分配.");

} else
// 当消息体为:MapMessage 做出的操作
if (message instanceof MapMessage) {
}

} catch (JMSException e) {
e.printStackTrace();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息