微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

spring boot应用程序启动时如何在容器内添加队列?

如何解决spring boot应用程序启动时如何在容器内添加队列?

目前,我正在使用 spring boot 和 spring-amqp 监听通过 API 调用创建的新队列 这是成功运行的代码片段

@RestController
@RequestMapping("/api/register/")
@NoArgsConstructor
public class RegisterQueuesController {
    @Autowired
    SimpleReceiver simpleReceiver;

    @PostMapping(value = "/queues")
    public ResponseEntity<String> addAll(final @RequestBody RegisteringQueues registeringQueues) {
        simpleReceiver.processQueueEvents(registeringQueues);
        return new ResponseEntity<>("SUCCESS",HttpStatus.CREATED);
    }
}


@Component
public class SimpleReceiver {

    @Autowired
    private RabbitListenerEndpointRegistry listenerEndpointRegistry;


    @RabbitListener(id = "qEvent")
    public void processQueueEvents(RegisteringQueues registeringQueues) {
        ((DirectMessageListenerContainer) this.listenerEndpointRegistry.getListenerContainer("queueContainer"))
                .addQueueNames(registeringQueues.getQueue());
        // processBeanQueueEvents();
        System.out.println("Received a message with the new queue name: " + registeringQueues.getQueue());

    }

    @RabbitListener(id = "queueContainer")
    public void processMessages(TestQueues testQueues,@Header(AmqpHeaders.CONSUMER_QUEUE) String queue) {
        System.out.println("Received a message on queue: " + queue + "data: " + testQueues);
        //process testQueues
    }

//postman payload
// http://localhost:8080/api/register/queues 

    {
    
        "queue":[
            "queue1","queue2","queue3"
        ]
    }

`

但如果应用程序再次启动,我需要在容器 (DirectMessageListenerContainer) 内注册队列并在应用程序启动时将队列添加到侦听器容器 ID“queueContainer”。

我无法在启动时侦听队列列表并将其添加到侦听器容器中。您能在这方面提供帮助吗

解决方法

您需要在某处保留队列名称(例如 db、redis 等),并在启动期间将新消息发送到控制侦听器队列。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。