Order POJOを受け取るために使用しているspring AMQPを使用してメッセージリスナを作成しました。メッセージタイプはapplication/jsonですので、jacksonメッセージコンバータを設定しました。 今までのことがうまくいき、リスナーでPOJOオブジェクトを自動的に再作成する注文を取得することができます。 しかし、私はこの例を拡張し、リスナーのいくつかのメッセージプロパティをチェックしたいと考えています。したがって、私のhandleMessage()でOrder POJOを使用する代わりに、 "org.springframework.amqp.core.Message"をパラメータとして使用したいと考えています。私は後でボディを変換することができますが、このようにして、アプリケーションで使用できるすべてのメッセージ関連プロパティをリスナーで取得します。春にメッセージリスナーアダプタを使用してメッセージオブジェクトを取得するAMQP
メッセージパラメータでhandleMessage()を使用しようとしましたが、ジャックソンコンバータを使用してメッセージ本文も変換しようとしているようです。 POJOクラスのOrderを渡す場所がわからないので、ジャックソンが自分のメッセージ本文を変換することはできますが、メッセージを正しく変換できるはずです。
私のコードから抜粋してください。 私はこれについてのロードブロッキングを打ったと思うので助けてください。私が送ります
POJO
public class Order {
private int orderid;
private String itemDescription;
テンプレートとCONVERTER SETTINGS
@Bean
public RabbitTemplate rubeExchangeTemplate() {
logger.info("Lets test autowiring " + rabbitConnectionFactory.getHost());
RabbitTemplate r = new RabbitTemplate(this.rabbitConnectionFactory);
r.setExchange("rmq-exchange");
r.setMessageConverter(jsonMessageConverter());
return r;
}
@Bean
public MessageConverter jsonMessageConverter()
{
final Jackson2JsonMessageConverter converter = new Jackson2JsonMessageConverter();
converter.setClassMapper(classMapper());
return converter;
}
@Bean
public DefaultClassMapper classMapper()
{
DefaultClassMapper typeMapper = new DefaultClassMapper();
typeMapper.setDefaultType(Order.class);
return typeMapper;
}
MESSAGE
Message message = MessageBuilder.withBody(messageText.getBytes())
.setMessageId("123")
.setContentType("application/json")
.setHeader("bar", "baz")
.build();
LISTENER(messageTextが注文POJOに準拠JSONが含まれています)
@Bean(value = "rube")
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(cf);
container.setQueueNames("rmq-rube-queue");
container.setMessageListener(messageListenerAdapter());
return container;
}
@Bean
public MessageListenerAdapter messageListenerAdapter() {
MessageListenerAdapter listener = new MessageListenerAdapter(pm, converter);
return listener;
}
おかげゲイリーを使用することを検討してください。新しいリスナーを作成することができました。これは古いアプローチよりもはるかに優れています。また、Spring MVCを使って私がどのように使い慣れているかについては、はるかに調整されています。ソリューションを手に入れることができて本当に嬉しいですが、皆さんが設計した方法にもっと喜んでいると思います。 – Pulkit