Yenka:
Tengo un servicio que envía el mensaje a RabbitMQ y el consumidor hacer alguna manipulación del mensaje y los re-cola.
Puedo enviar con éxito para RabbitMQ el mensaje inicial, pero el problema es que no puedo volver a enviar ningún mensaje a RabbitMQ consumido si el mensaje requiere modificaciones.
@Service
public class MyService {
/**
* The template
*/
@Autowired
private AmqpTemplate amqpTemplate;
private final RabbitMQConfig config;
public void send(String message) {
try {
amqpTemplate.convertAndSend("ex", "r", message);
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Luego, en mi config He fijado: pública @Bean ConnectionFactory ConnectionFactory () {/ * código de trabajo * /}
@Bean
public Queue myQueue() { return new Queue("my-queue");
// etc...
@Bean
MessageListenerAdapter myListenerAdapter(MyListener listener) {
return new MessageListenerAdapter(listener, "listener");
}
@Bean
MyListener myListener() {
return new MyListener();
}
luego...
public class MyListener {
public void receiveMessage(String message) {
// ... some code
// if message requires modification, then repush
new Repush().push(message);
}
}
Traté de crear una nueva clase de nuevo, pero el "myService" siempre nula
@Component
public class Repush {
@Autowired
private MyService myService;
public void push(String message) {
// myService is null at this point
}
}
Demian Belsky:
No utilice new
para la creación de frijol. Campos de primavera inyecta solamente en los granos. Su MyListener
es un grano. Sólo tiene que añadir Repush
campo con @Autowired
anotación en esta clase.
public class MyListener {
@Autowired
private Repush repush;
public void receiveMessage(String message) {
// ... some code
// if message requires modification, then repush
repush.push(message);
}
}