我正在使用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 :( –