2012-08-07 100 views
4

我使用:如何转换JMS消息对接收的消息侦听到的域对象

  • 春3.1.1
  • 的ActiveMQ 5.6.0

我有两个JMS应用:

  • 应用程序A使用JmsTemplate使用jmsTemplate.convertAndSend(msg)发送域对象;
  • 应用B使用消息监听和消息转换器被登记

当所接收的消息被转换,空值被提取。

我知道这一定很简单,但我得到空值,我还没有找到一个例子,看看我做错了什么。

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

域对象

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; 
} 

}

应用甲

@Component 
public class MessageSender { 

    @Autowired 
    private JmsTemplate jmsTemplate; 

    public MessageSender() { 

    } 

    public void sendMessage(MyDomainObj msg) { 
     jmsTemplate.convertAndSend(msg); 
    } 
} 

应用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 { 

     .... 
    } 
} 

回答

3

解决办法是:

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

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

    return myDomainObj; 
} 
+0

用Spring集成你的设计要简单得多。 – luksmir 2013-07-16 09:17:31

+0

@luksmir你能解释一下吗? – Sergio 2016-09-06 04:20:03