二、Spring整合JMS(一)——基于ActiveMQ实现
四、Spring整合JMS(三)——MessageConverter消息转换器
消息转换器MessageConverter
MessageConverter的作用主要有两方面,一方面它可以把我们的非标准化Message对象转换成我们的目标Message对象,这主要是用在发送消息的时候;另一方面它又可以把我们的Message对象转换成对应的目标对象,这主要是用在接收消息的时候。
下面我们就拿发送一个对象消息来举例,假设我们有这样一个需求:我们平台有一个发送邮件的功能,进行发送的时候我们只是把我们的相关信息封装成一个JMS消息,然后利用JMS进行发送,在对应的消息监听器进行接收到的消息处理时才真正的进行消息发送。
假设我们有这么一个Email对象:
<span style="color:#000000">package cn.tzz.jms.activemq.spring.obj;
import java.io.Serializable;
public class Email implements Serializable {
private static final long serialVersionUID = 1L;
private String receiver;
private String title;
private String content;
public Email(String receiver, String title, String content) {
this.receiver = receiver;
this.title = title;
this.content = content;
}
public String getReceiver() {
return receiver;
}
public void setReceiver(String receiver) {
this.receiver = receiver;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Email [receiver=" + receiver + ", title=" + title
+ ", content=" + content + "]";
}
}
</span>
这个Email对象包含了一个简单的接收者email地址、邮件主题和邮件内容。我们在发送的时候就把这个对象封装成一个ObjectMessage进行发送,使用MessageConverter的时候我们在使用JmsTemplate进行消息发送时只需要调用其对应的convertAndSend方法即可。代码如下所示:
<span style="color:#000000"><span style="color:#000000">import java.io.Serializable;
import javax.jms.Destination;
public interface EntityProducerService {
public void sendMessage(Destination destination, final Serializable obj);
}
</span></span>
<span style="color:#000000"><span style="color:#000000">import java.io.Serializable;
import javax.jms.Destination;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Service;
import cn.tzz.jms.activemq.spring.obj.service.EntityProducerService;
@Service(value="entityProducerService")
public class EntityProducerServiceImpl implements EntityProducerService {
@Autowired
private JmsTemplate jmsTemplate;
public void sendMessage(Destination destination, final Serializable obj) {
//未使用MessageConverter的情况
// jmsTemplate.send(destination, new MessageCreator() {
//