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

如何在Apache Camel中通过JMS队列传递POJO

隗瑞
2023-03-14

我对Jboss Fuse相对较新

<route id="fileRoute">
        <from uri="file:{{PFlowIn_AEROW}}?delay={{PFlowScanDelay}}&amp;filter=#fileFilter&amp;delete=true"/>                 
        <process ref="saveFlowParamsInPOJO"/>
        <recipientList>
            <simple>activemq:queue:databaseQueue, activemq:queue:messageArchiveQueue, activemq:queue:XmlValidationQueue</simple>
        </recipientList>
    </route>

共有2个答案

居英资
2023-03-14

将您的POJO转换为数据交换格式(例如json)并保存到标头中

  1. 将POJO转换为json字符串
  2. 将json字符串保存到消息头
  3. 将json字符串转换为POJO或map

您可以导入apache camel json组件中可用的json库,然后执行封送/解封。

如果希望在bean中转换POJO,还可以尝试使用Jackson ObjectMapper类进行转换。

// Convert from POJO to json String
ObjectMapper objectMapper = new ObjectMapper();
String pojoAsString = objectMapper.writeValueAsString(yourPojo);

// Convert from json String to POJO
YourPojo yourPojo = objectMapper.readValue(pojoAsString , YourPojo.class);

// convert from json String to map
Map<String, Object> map = objectMapper.readValue(pojoAsString , new TypeReference<Map<String,Object>>(){});

上述ObjectMapper示例的来源

拓拔骁
2023-03-14

据我所知,您只能在消息体中设置一个对象,但您有两个选项。

>

exchange.getIn().setHeader("myPOJO", POJOvalue);

编辑:

正如@BeenaRautela所指出的,建议的第二个选项无效,因为标头只接受非对象数据类型。

其他选项包括:

  • 在消息正文中发送POJO并尝试将XML作为标题中的字符串发送。
  • 将POJO参数存储在Map中并将其设置在标头中。
 类似资料:
  • 我正在尝试创建一条骆驼路线,它将: 从队列中获取JMS消息,消息体是SOAP请求 这是我的代码: endpoint配置: 我觉得我误解了这个场景中骆驼工作的一些基本原理。似乎是soap信封的存在导致了此问题。我曾假设camel能够获取原始soap消息并将其转换为cxfendpoint的正确消息格式。 有人能向我解释一下如何将SOAP请求传递给CXFendpoint吗?

  • 问题内容: 如何通过$ _GET将数组类型的一个或多个变量传递给另一页? 我总是以以下形式传递变量值 那传球呢? 我是否需要编写一个for循环并附加所有值? 谢谢 问题答案: 您可以使用语法通过_GET传递数组: PHP理解此语法,因此等于。 您还可以指定键: 多维数组也可以工作: 自动执行此操作: 一种替代方法是传递json编码的数组: 您可以解析为: 并再次使用json_encode对其进行编

  • 一点背景:我需要改进我们的一个批处理框架的性能。在那里,批处理输入被发送到JMS队列。此外,在队列endpoint,我们有一个MDB,它正在使用消息。现在,我在这里怀疑的是,如果有大量的消息,就没有MDB实例可以使用这些消息,因为所有这些消息都在处理之前的消息时被搁置。为了改善这一点,我正在考虑在MDB业务逻辑中实现一个线程池,这样一旦MDB接收到消息并将其传递给线程,它就可以免费使用另一条消息。

  • 我在域模式下运行Wildfly17。我们一直在手动添加JMS队列,但我宁愿将配置作为部署脚本的一部分添加。我可以使用创建服务器和数据源,但在队列方面似乎没有任何进展。我希望domain_config.xml的结尾如下所示: 我已经研究了如何在Wildfly中使用CLI设置消息传递子系统,但我得到的都是错误。 domain_config.xml的完整嵌套是:

  • 下面是给我带来麻烦的文件: 我试图通过路由将新的和传递到我的“feed”组件中。但我收到一条错误消息: 我知道为什么会发生这种情况,但不知道如何将状态传递给我的“feed”组件。在过去的5个小时里,我一直在试图解决这个问题,我变得非常绝望! 请救命!谢谢 下面的答案很有帮助,我感谢athors,但他们不是做到这一点的最简单的方法。在我的例子中,最好的方法是这样的:当您更改路线时,只需向其附加一条消

  • 问题内容: 我想知道在您仅读取变量时是否将其作为按引用传递的优良作法,还是应始终将其作为值传递。 引用传递示例: 传递值的示例: 哪个更好 ?例如,如果我要循环运行1000次? 循环示例: 问题答案: 如果您打算传递一个 值 (因此该函数不会对其进行修改) ,则没有理由通过引用传递它:这只会使您的代码更难以理解,因为人们会认为“ 此函数可以修改我将要修改的内容。传递给它-哦,它没有修改? ” 在您