如何将使用Message Listener接收的JMS消息转换为域对象

mik*_*e.l 5 spring jms

我在用:

  • 春季3.1.1
  • ActiveMQ 5.6.0

我有两个JMS应用程序:

  • App A使用JmsTemplate使用jmsTemplate.convertAndSend(msg)发送域对象;
  • App B使用Message Listener并注册了Message Converter

转换接收的消息时,将提取空值.

我知道这必须相当简单,但我得到空值,我没有找到一个例子来看我做错了什么.

有人可以解释一下这是如何工作的吗?

域对象

public class MyDomainObj implements Serializable {

private static final long serialVersionUID = -5411260096045103654L;
private String name;
private String msg;

public MyDomainObj() {

}

public MyDomainObj(String name, String msg) {
    this.name = name;
    this.msg = msg;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getMsg() {
    return msg;
}

public void setMsg(String msg) {
    this.msg = msg;
}
Run Code Online (Sandbox Code Playgroud)

}

应用程序A.

@Component
public class MessageSender {

    @Autowired
    private JmsTemplate jmsTemplate;

    public MessageSender() {

    }

    public void sendMessage(MyDomainObj msg) {
        jmsTemplate.convertAndSend(msg);
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序B.

@Component
public class MyReceiverConverter implements MessageConverter {

    @Override
    public Object fromMessage(Message msg) throws JMSException,
            MessageConversionException {

        MyDomainObj myDomainObj = new MyDomainObj(msg.getStringProperty("name"), msg.getStringProperty("msg"));


        return myDomainObj;
    }

    @Override
    public Message toMessage(Object msg, Session session) throws JMSException,
            MessageConversionException {

        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

mik*_*e.l 5

解决方案是:

@Override
public Object fromMessage(Message msg) throws JMSException,
        MessageConversionException {

    MyDomainObj myDomainObj = (MyDomainObj)((ObjectMessage)msg).getObject();

    return myDomainObj;
}
Run Code Online (Sandbox Code Playgroud)

  • @luksmir 你能解释一下吗? (3认同)