gpt4 book ai didi

java - 如何嵌套 Spring JMS MessageConverters

转载 作者:行者123 更新时间:2023-11-30 05:17:30 25 4
gpt4 key购买 nike

我想编写一个可以包装另一个 MessageConverter 的 MessageConverter 类。此 MessageConverter 将调用子转换器,假定该子转换器生成 TextMessage。它将获取有效负载并用 GZIP 对其进行压缩,创建最终返回给发送者的 BytesMessage。

问题出在编写 fromMessage() 上。我可以将有效负载转换回字符串,但随后我想创建一个“虚拟”TextMessage 将字符串填充到 to 然后传递给子 MessageConverter 的 fromMessage() 方法。在那里,我遇到了困难,因为如果没有 JMS session 对象,我就无法创建 TextMessage,而且似乎根本无法在此上下文中获取 session 。

我可以创建其他属性来将更多内容连接到此类,但看起来我什至无法轻松地从 JMSTemplate 对象获取 session ,而且我无法想象我还需要什么.

我即将在此代码中创建一个私有(private) TextMessage 实现,只是为了包装子 MessageConverter 的字符串。该类将需要大量的虚拟方法来充实界面,所有这些输入都会让小耶稣哭泣。

谁能提出更好的方法吗?

最佳答案

您真的想将 MessageConverter 实例包装在其他 MessageConverter 实例中吗? MessageConverter 的全部目的是将消息转换为其他内容(不是 JMS 消息)。它并不是真正设计来链接它们(每个步骤都会生成一个假的 JMS 消息)。

为什么不引入自己的界面

interface MessageBodyConverter {
/** return a converted body of the original message */
Object convert(Object body, Message originalMessage);
}

然后,您可以创建一个调用其中之一的 MessageConverter(然后可以根据需要嵌套多深)

class MyMessageConverter implements MessageConverter {
private final MessageBodyConverter converter;

public Object fromMessage(Message message) {
if (message instanceof ObjectMessage) {
return converter.convert(objectMessage.getObject(), message);
...
}
}

然后,您可以根据需要将这些 MessageBodyConverter 对象链接到任意深度 - 而且您还可以访问原始 JMS 消息(以获取 header 等),而无需尝试创建 Message 的伪(可能不符合 JMS 兼容)实现?

关于java - 如何嵌套 Spring JMS MessageConverters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/241185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com