【问题标题】:JMS / ActiveMQ: Sending an object with objects as class membersJMS / ActiveMQ:发送对象作为类成员的对象
【发布时间】:2012-10-29 17:19:24
【问题描述】:

我正在使用 ActiveMQ(带有 Spring)向远程 OSGi-Container 发送消息。 这很好用,但有一个问题。

我有两个实现 Serializable 的类。一个类是另一个类的类成员,如下所示:

public class Member implements Serializble {
private int someValue;
private static final long serialVersionUID = -4329617004242031635L;
... }

public class Parent implements Serializable {
    private static final long serialVersionUID = -667242031635L;
private double otherValue;
private Member;
}

所以,当发送一个Parent实例时,Parent的Member为null。

希望你明白我的问题是什么:)

编辑:有趣的问题:我的班级中有一个 java.util.date 已正确序列化,但这是唯一的,所有 Doubles 等都是空的

【问题讨论】:

  • 那么,您将序列化对象作为字节消息发送?我的理解正确吗?
  • 是否可以选择使用对象消息?

标签: jms activemq spring-jms


【解决方案1】:

字节消息中的序列化对象有点难以处理。

我会使用对象消息,正如 Aksel Willgert 建议的那样,或者只是将其采用更松散耦合的格式,例如序列化 XML。我的快速解决方案是使用 XStream 以更松散耦合的方式进出 XML,这里有一个快速指南:XStream

更新,以及这里的一些代码(需要将xstream-.jar添加到你的项目中)

// for all, instanciate XStream
XStream xstream = new XStream(new StaxDriver());

// Producer side:
TextMessage message = session.createTextMessage(xstream.toXML(mp));
producer.send(message);


// consumer side:
TextMessage tmsg = (TextMessage)msg;
Parent par = (Parent)xstream.fromXML(tmsg.getText());

par.getMember() // etc should work just fine.

【讨论】:

    【解决方案2】:

    如果对象是一个选项,你可能会选择这样的东西

    制作方:

    SomeObject someObject = new SomeObject();
    ObjectMessage objectMessage = session.createObjectMessage();
    objectMessage.setObject(someObject);
    producer.send(objectMessage);
    

    消费者方面:

    private class MessageConsumer implements MessageListener {
        @Override
        public void onMessage(Message message) {
            logger.debug("onMessage() " + message);
    
            if (message instanceof ObjectMessage) {
                ObjectMessage objectMessage = (ObjectMessage) message;
                SomeObject someObject = (SomeObject)objectMessage.getObject();
            }
        }
    }
    

    【讨论】:

    • 我不创建这样的消息,我在 beans.xml 中使用 来创建客户端和端点。不要不知道如何在那里改变它
    猜你喜欢
    • 2012-01-07
    • 1970-01-01
    • 2019-04-09
    • 2018-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    相关资源
    最近更新 更多