提问:
ActiveMQ处理对象消息。
本节课程在实操过程中不管是用教程提供的5.9版本还是更新的版本都出现了序列化对象无法转换的问题,我看前面有人提到过这个情况,我在查询官网解释之后程序中加了一段代码:

这也是官网给的测试时避开序列化对象检测的解决方案,但是我在这样处理之后虽然解决了第一个Object对象无法转换为Users对象的问题,却出现了新的问题:java.io.InvalidClassException:

报错信息原文:
javax.jms.JMSException: Failed to build body from bytes. Reason: java.io.InvalidClassException: com.z.Users; local class incompatible: stream classdesc serialVersionUID = -8296736276038661128, local class serialVersionUID = 8495079951020555784
at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:36)
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:218)
at com.z.HelloWorldConsumer2.readHelloWorldActiveMQ(HelloWorldConsumer2.java:61)
at com.z.TestConsumer.main(TestConsumer.java:12)
Caused by: java.io.InvalidClassException: com.z.Users; local class incompatible: stream classdesc serialVersionUID = -8296736276038661128, local class serialVersionUID = 8495079951020555784
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:616)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1843)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1713)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2000)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1535)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:422)
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:211)
... 2 more
这种我去网上查出来都是对应于redis缓存的问题,解决方案:(1)清理redis缓存 (2)对Users对象只对id序列化。
我采用方式(2) ,在生产者和消费者工程下面的Users类中都添加了序列化id并且两边保持一致:

然后再进行测试的时候解决了这个问题,不知道是否会引起其他问题?请老师解答。
同时还发现一个现象,在解决序列化问题之前,consumer无法正常接收消息队列中的数据,但是activeMQ中的消息好像在一段时间以后就自动进入dequeue,这个视频中没有讲到,是不是activeMQ队列中的数据也有时间限制?到期自动出队?