我正在使用与hornetQ的spring-integration。问题是我在消息(方法)中放置了一个自定义标头,但当它击中订户时,标头不再可用。我有一些配置属性需要设置以保留标题吗?
应用程序收到消息(我可以在控制台日志中看到Method
标题,因此我知道它实际上正在获取正确的消息)。它基本上只是将消息路由到出站队列,以便客户端可以订阅它(如果有更简洁的方法,请告诉我)
<int:channel id="partsChannel" />
<int-jms:message-driven-channel-adapter
id="jmsPartsInbound"
acknowledge="transacted"
destination-name="parts.in"
channel="partsChannel"
connection-factory="jmsConnectionFactory"
/> <!-- error-channel="partsInboundFailedChannel" -->
<int-jms:outbound-channel-adapter
id="jmsPartsOutbound"
destination-name="parts.out"
channel="partsChannel"
connection-factory="jmsConnectionFactory"
pub-sub-domain="true"
>
<int-jms:request-handler-advice-chain>
<int:retry-advice max-attempts="3">
<int:exponential-back-off initial="2000" multiplier="2" />
</int:retry-advice>
</int-jms:request-handler-advice-chain>
</int-jms:outbound-channel-adapter>
应用程序订阅如下:
<int:channel id="partsInboundChannel" />
<int-jms:message-driven-channel-adapter
id="jmsPartsInbound"
acknowledge="transacted"
destination-name="parts.out"
channel="partsInboundChannel"
pub-sub-domain="true"
connection-factory="jmsConnectionFactory"/>
这是在订阅者中获取消息的部分。
@ServiceActivator(inputChannel = "partsInboundChannel")
public void processPart(final Message message) {
...message.getHeaders does not contain the "Method" header
}
答案 0 :(得分:1)
问题不在DefaultJmsHeaderMapper.fromHeaders
:
if (value != null && SUPPORTED_PROPERTY_TYPES.contains(value.getClass())) {
try {
String propertyName = this.fromHeaderName(headerName);
jmsMessage.setObjectProperty(propertyName, value);
}
其中SUPPORTED_PROPERTY_TYPES
是:
private static List<Class<?>> SUPPORTED_PROPERTY_TYPES = Arrays.asList(new Class<?>[] {
Boolean.class, Byte.class, Double.class, Float.class, Integer.class, Long.class, Short.class, String.class });
因此,如果您的method
确实属于Method
类型,则会跳过它。
请考虑使用其name
。