多种类型消息的 JMS 侦听器?
JMS listener for mutiply types od message?
我需要从队列中接收 JSON 格式的消息。所以我用我的 POJO class 的参数为方法实现了 serializable/deserializable + JMS 接收器(简单 JSON)
但是当我想接收不是 JSON 格式的消息(例如字符串)时,我的程序当然崩溃了。
也许我必须创建两个 JMS 侦听器?但是第二个监听器的目的地必须是另一个队列通道?
P.S 使用 IBM MQ
//MyMessage is class with my POJO
@Component
public class MyMessageListener {
@Bean
public MessageConverter converter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter() {
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
TextMessage message = (TextMessage) super.toMessage(object, session);
System.out.println("outgoing JSON: " + message.getText());
return message;
}
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
if (message instanceof TextMessage) {
try {
System.out.println("incoming JSON: " + ((TextMessage) message).getText());
} catch (JMSException e) {
throw new MessageConversionException("Failed to convert JSON message content", e);
}
} else {
throw new IllegalArgumentException("This receiver only processes text messages!");
}
return super.fromMessage(message);
}
};
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
@JmsListener(destination = "${input.queue}")
public static void listener(MyMessage myMessage) throws JMSException {
System.out.println("msg: " + myMessage);
}
}
它在我删除方法后工作:toMessage 和 fromMessage(但转换器保留),现在侦听器可以接收所有类型的消息。
我需要从队列中接收 JSON 格式的消息。所以我用我的 POJO class 的参数为方法实现了 serializable/deserializable + JMS 接收器(简单 JSON) 但是当我想接收不是 JSON 格式的消息(例如字符串)时,我的程序当然崩溃了。 也许我必须创建两个 JMS 侦听器?但是第二个监听器的目的地必须是另一个队列通道?
P.S 使用 IBM MQ
//MyMessage is class with my POJO
@Component
public class MyMessageListener {
@Bean
public MessageConverter converter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter() {
@Override
public Message toMessage(Object object, Session session) throws JMSException, MessageConversionException {
TextMessage message = (TextMessage) super.toMessage(object, session);
System.out.println("outgoing JSON: " + message.getText());
return message;
}
@Override
public Object fromMessage(Message message) throws JMSException, MessageConversionException {
if (message instanceof TextMessage) {
try {
System.out.println("incoming JSON: " + ((TextMessage) message).getText());
} catch (JMSException e) {
throw new MessageConversionException("Failed to convert JSON message content", e);
}
} else {
throw new IllegalArgumentException("This receiver only processes text messages!");
}
return super.fromMessage(message);
}
};
converter.setTargetType(MessageType.TEXT);
converter.setTypeIdPropertyName("_type");
return converter;
}
@JmsListener(destination = "${input.queue}")
public static void listener(MyMessage myMessage) throws JMSException {
System.out.println("msg: " + myMessage);
}
}
它在我删除方法后工作:toMessage 和 fromMessage(但转换器保留),现在侦听器可以接收所有类型的消息。