我正在使用Spring AMQP的MessageListenerContainer从RabbitMq Broker接收消息。尽管我能够在侦听器内部接收消息,但自动装配不在侦听器内部工作。春季Autowiring对RabbitListenerContainer不起作用
这里是如何我已经配置我的听众
@Bean
public SimpleMessageListenerContainer listenerContainer() {
SimpleMessageListenerContainer listenerContainer = new SimpleMessageListenerContainer();
listenerContainer.setConnectionFactory(this.inputQueueMgr
.getRabbitConnectionFactory());
JsonMessageConverter converter = new JsonMessageConverter();
listenerContainer.setMessageConverter(converter);
listenerContainer.setMessageListener(new InputQueueEventDispatcher());
listenerContainer.setQueueNames("queue1");
listenerContainer.setAcknowledgeMode(AcknowledgeMode.AUTO);
listenerContainer.setPrefetchCount(1);
return listenerContainer;
}
这里就是我正在听消息从RabbitMQ的
@Component(value = "inputMessageListner")
public class InputQueueEventDispatcher implements Serializable, MessageListener {
private static final long serialVersionUID = -5391659256992655430L;
@Autowired
private volatile InputQueueManagerImpl inputQueueMgr;
@Autowired
private volatile NotificationQueueManagerImpl notificationManager;
@Value("${input.rabbitmq.events.queue}")
private String queueName;
@Autowired
private SubscriptionRepository subRepository;
@SuppressWarnings({ "unchecked" })
@Override
public void onMessage(Message message) {
try {
String messageContent = new String(message.getBody());
.....
}
类的问题是内部的onMessage(消息消息)所有自动装配组件即将变为空。
PS->请注意,我已将所有自动装入实例声明为@Component并执行适当的ComponentScan来适当地扫描其软件包。事实上,这些组件在正常流程中会自动装配,但由于onMessage(消息消息)在单独的线程上执行,因此这些值显示为空。有什么方法可以在侦听器中启用自动装配。
感谢
那么,如何让这个线程获得Spring的ApplicationContext? –
我的方法onMessage确实被调用(在一个单独的线程),但问题是我看到所有依赖关系自动装配为null :( –