Spring AMQP 从消息转换
Spring AMQP Converting from a Message
根据documentation 使用@RabbitListener注解配置监听器时
the inferred type information is added to the MessageProperties; this allows the converter to convert to the argument type of the target method
所以我可以使用自定义 pojo 进行转换。
我的问题 - 当基于 xml 的策略用于配置侦听器时,它是否以相同的方式工作:<rabbit:listener-container>
<rabbit:listener ref=...
否;使用更简单的 MessageListenerAdapter
.
当使用那个表单时,如果消息中没有类型信息headers,你必须配置消息转换器来告诉它你想把数据转换成什么类型...
<rabbit:listener-container message-converter="jsonConverter">
<rabbit:listener ref="listener" method="handleFoo" queue-names="input.foo" />
</rabbit:listener-container>
<bean id="listener" class="com.example.Listener" />
<bean id="jsonConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter">
<property name="classMapper">
<bean class="org.springframework.amqp.support.converter.DefaultClassMapper">
<property name="defaultType" value="com.example.Foo" />
</bean>
</property>
</bean>
和
public class Listener {
public void handleFoo(Foo foo) {
System.out.println(foo);
}
}
和
Foo [bar=bar]
Foo [bar=bar]
来自
{ "bar" : "bar" }
和
content_type: application/json
根据documentation 使用@RabbitListener注解配置监听器时
the inferred type information is added to the MessageProperties; this allows the converter to convert to the argument type of the target method
所以我可以使用自定义 pojo 进行转换。
我的问题 - 当基于 xml 的策略用于配置侦听器时,它是否以相同的方式工作:<rabbit:listener-container>
<rabbit:listener ref=...
否;使用更简单的 MessageListenerAdapter
.
当使用那个表单时,如果消息中没有类型信息headers,你必须配置消息转换器来告诉它你想把数据转换成什么类型...
<rabbit:listener-container message-converter="jsonConverter">
<rabbit:listener ref="listener" method="handleFoo" queue-names="input.foo" />
</rabbit:listener-container>
<bean id="listener" class="com.example.Listener" />
<bean id="jsonConverter" class="org.springframework.amqp.support.converter.Jackson2JsonMessageConverter">
<property name="classMapper">
<bean class="org.springframework.amqp.support.converter.DefaultClassMapper">
<property name="defaultType" value="com.example.Foo" />
</bean>
</property>
</bean>
和
public class Listener {
public void handleFoo(Foo foo) {
System.out.println(foo);
}
}
和
Foo [bar=bar]
Foo [bar=bar]
来自
{ "bar" : "bar" }
和
content_type: application/json