gpt4 book ai didi

Java Spring 将消息从消费者发送回队列

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:08 24 4
gpt4 key购买 nike

我有一个向 rabbitmq 发送消息的服务,消费者对消息进行一些操作并重新排队。

我可以成功地将初始消息发送到 rabbitmq,但问题是如果消息需要修改,我无法将任何已使用的消息重新发送到 rabbitmq。

@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();
}
}
}

然后在我的配置中我设置了: @ bean public ConnectionFactory connectionFactory() {/* 工作代码 */}

@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();
}

然后...

public class MyListener {
public void receiveMessage(String message) {
// ... some code
// if message requires modification, then repush
new Repush().push(message);
}
}

我尝试用 new 创建一个新类,但“myService”始终为 null

@Component
public class Repush {
@Autowired
private MyService myService;

public void push(String message) {
// myService is null at this point
}
}

最佳答案

不要使用 new 创建 bean。 Spring 仅在 bean 中注入(inject)字段。您的 MyListener 是一个 bean。只需在此类中添加带有 @Autowired 注释的 Repush 字段。

public class MyListener {
@Autowired
private Repush repush;

public void receiveMessage(String message) {
// ... some code
// if message requires modification, then repush
repush.push(message);
}
}

关于Java Spring 将消息从消费者发送回队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53306825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com