JMX是一个标准,定义了消息代理(message broker)的通用API,就想JDBC为数据库访问提供了通用接口一样。
JMX长期以来一直是异步消息首选方案。
启动器可以使用ActiveMQ或者ActiveMQ Artemis(重新实现的下一代ActiveMQ)。
JmsTemplate是Spring对JMS集成支持功能的核心,与其他模块类似,消除了大量传统使用方式的样板代码
public void send(MessageCreator messageCreator);
public void send(Destination destination, MessageCreator messageCreator);
public void send(String destinationName, MessageCreator messageCreator);
public void convertAndSend(Object message);
public void convertAndSend(Destination destination, Object message);
public void convertAndSend(String destinationName, Object message);
public void convertAndSend(Object message, MessagePostProcessor postProcessor);
public void convertAndSend(Destination destination, Object message, MessagePostProcessor postProcessor);
public void convertAndSend(String destinationName, Object message, MessagePostProcessor postProcessor);
send()需要MessageCreator生成Message对象
covertAndSend()接受Object对象,自动转为Message
这个自动转换的操作是通过MessageConverter实现的,Spring定义了接口
Message toMessage(Object var1, Session var2)
Object fromMessage(Message var1)
默认有四种实现类。
covertAndSend()自动Object->Message,并且接受一个MessagePostProcessor对象,用来发送前对Message进行定义
可以对消息进行后期处理,比如可以统一加上便于区分的头信息
jmsTemplate.convertAndSend(message, new MessagePostProcessor() {
@Override
public Message postProcessMessage(Message message) throws JMSException {
message.setStringProperty("X_SOURCE", "MASTER");
return message;
}
});
默认目的地spring.jms.template.default-destination=taco.queue
一半有两种消费模式
JmsTemplate都是拉取模式,如果消息能够快速得到处理,那么他们是非常适合的方案。
但是,如果消息处理器需要根据自己的时间请求更多信息,拉取模式更适合。
JMS作为JAVA规范只能运行在Java应用中,RabbitMQ和Kafka等较新的消息传递方案克服了这类问题。
RabbitMq可以说是AMQP(Advanced Message Queuing Protocol, 高级消息队列协议)最杰出的实现,提供了比JMS更高级的消息路由策略。
消息抵达MQ代理时,会进入设置的Exchange上,Exchange负责将它路由到一个或多个队列中去。
这个过程会根据exchange的类型、exchange和队列之前的binding以及消息的routing Key进行路由。
具体可以参考《RabbitMQ in Action》Alvaro Videla、Jason J.W.Williams。使用方法和JmsTemplate类似。
详情可以阅读《Kafka in Action》-Dylan Scott。
原文:https://www.cnblogs.com/AganRun/p/13352939.html