当前位置: 首页 > 知识库问答 >
问题:

发送ObjectMessage的ActiveMQ property SERIALIZABLE_包

洪飞驰
2023-03-14

使用SpringBoot运行一个简单的项目,并通过@Configuration创建ActiveMQ代理。

在Main方法中,在SpringApplication.run之前,我设置了这个;

System.setProperty("org.apache.activemq.SERIALIZABLE_PACKAGES", "*");

在创建代理和ActiveMQConnectionFactory时信任所有包;

factory.setTrustAllPackages(true);

路线:

from("timer://getStuffDone?period=5s") //just a test
    .to("bean://superProcessor?method=process")  // new a simple object and puts it as body
    .to("activemq:queue:superQueue?jmsMessageType=Object");

对象:

public class SuperObject {
public String name;}

但是,我明白了:

原因:组织。阿帕奇。骆驼NoTypeConversionAvailableException:没有可从类型net转换的类型转换器。超级测试。SuperObject到所需类型:java。io。可与value net序列化。超级测试。SuperObject@2b38b4cb在org。阿帕奇。骆驼impl。转换器。BaseTypeConverterRegistry。mandatoryConvertTo(BaseTypeConverterRegistry.java:206)~[camel-core-2.22.1.jar:2.22.1]位于org。阿帕奇。骆驼组成部分jms。JmsBinding。createJmsMessageForType(JmsBinding.java:672)~[camel-jms-2.22.1.jar:2.22.1]

如果我实现Serializable,它工作得很好。。,但我希望它能够自动处理,因为我在可序列化的_包中使用了通配符。有什么线索可以解释为什么它没有按预期工作?ActiveMQ版本5.15.6

共有1个答案

唐博文
2023-03-14

不,属性是组织。阿帕奇。activemq。SERIALIZABLE_包不会减轻您实现可序列化的负担。默认情况下,它只是代理上阻止ObjectMessage封送/解封的安全设置。

要允许ObjectMessage序列化,您必须在代理上使用org.apache.activemq.SERIALIZABLE_PACKAGES配置所需的包,并在客户端上使用factory.setTrustedPackages配置所需的包。

无论这种html" target="_blank">配置如何,您都必须将对象实现为可序列化的。

来自ActiveMQ文档:

ObjectMessage对象依赖于列表/散集对象有效负载的Java序列化。这个过程通常被认为是不安全的,因为恶意有效负载可以利用主机系统。这就是为什么从5.12.2和5.13.0版本开始,ActiveMQ强制用户将可以使用ObjectMessages交换的包明确列入白名单。

 类似资料:
  • 我通过Spring Boot中编写的侦听器使用JMS对象消息。我正在通过我的Camel应用程序将ObjectMessage发送到ActiveMQ队列,我正在Spring Boot应用程序中的侦听器类中侦听队列。 代码: 这是我的POJO类: 在ActiveMQ队列中,我收到的消息为: 我在Spring Boot中的JMS侦听器: 我得到一个Exception@line: 通过堆栈溢出和网络上的其他

  • 我下载了HiveMQ,它是一个代理,正在运行: 2018-03-05 19:28:08,195信息-在地址0.0.0.0和端口1883上启动TCP侦听器 现在我想做的是向这个代理或Putty发送类似“Hello World”之类的内容,或者显示整个MQTT有效负载的内容。C是如何处理这个的?这些文档帮助我理解了发生了什么,但并没有真正帮助我编写C代码,因为我对它还是非常陌生。

  • 虽然Python通过 smtplib 库使得发送email变得很简单,Scrapy仍然提供了自己的实现。 该功能十分易用,同时由于采用了 Twisted非阻塞式(non-blocking)IO ,其避免了对爬虫的非阻塞式IO的影响。 另外,其也提供了简单的API来发送附件。 通过一些 settings 设置,您可以很简单的进行配置。 简单例子 有两种方法可以创建邮件发送器(mail sender)

  • 发送TOPIC 发送 TOPIC,就是 发送一条指定topic的message 内容。 参数说明 字段 类型 必须? 说明 device String 是 需要发送的设备 topic String 是 消息内容的主题 text String 是 消息内容 示例代码: Swift: RokidMobileSDK.vui.sendMessage(topic: "topic", text: "text"

  • 发送 TTS,就是 发送一条 能让设备立即说的 内容。 流程 接口 参数说明 字段 类型 必须? 说明 device String 是 需要发送的设备 tts String 是 让设备说的话 示例代码: Swift: RokidMobileSDK.vui.sendTts(tts: String, to device: RKDevice) Objc: [RokidMobileSDK.vui sen

  • 流程 发送TTS 发送 TTS,就是 发送一条 能让设备立即说的 内容。 参数说明 字段 类型 必须? 说明 deviceId String 是 设备Id tts String 是 让设备说的话 示例代码: Java: RokidMobileSDK.vui.sendTts(deviceId, tts, new IChannelPublishCallback() { @Override