当前位置: 首页 > 知识库问答 >
问题:

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

邢昊焜
2023-03-14

目前,我正在收听使用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”中。

我无法侦听队列列表并在启动时将其添加到listner容器。在这方面你能帮忙吗

共有1个答案

翟丰茂
2023-03-14

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

 类似资料:
  • 问题内容: 我尝试使用范围类型APPLICATION和带有@ Create,@ Beg的方法来注释类,但这似乎不起作用。 我想要的是在应用程序启动时立即启动无限循环。 问题答案: 如果希望在初始化后立即执行方法,则可以使用以下注释:

  • 我正在docker容器中运行一个简单的spring boot应用程序。在启动时,是否从或应用程序将始终在以下时间点挂起: 这里有一个问题,我只能在数字海洋(1CPU,1GB MEM)的Ubuntu 14.04盒子上重现这个,即使它在容器中运行。在我的本地机器上,一切都运行良好。 Dockerfile文件: 我尝试过的事情 给JVM更多内存(占机器总数的75%) 按这里建议的方式停止库 我能接触到的

  • 我有一份Java申请。 应用程序有一个决定应用程序是否在启动时启动的设置。 目前,我通过在StartUp items文件夹中放置/删除快捷方式实现了这一点。 然而,我想知道是否有更好的方法来处理这种行为。 编辑 是的,是视窗。抱歉之前没有清除。 应用程序有一个UI,用户可以在其中触发操作,并且应用程序在运行时定期在后台运行一些任务。 @Peter,如何使用应用程序中的代码更改注册表?这种方法是否与

  • 问题内容: 我有一个Java应用程序。 该应用程序具有一个设置,该设置决定该应用程序是否在启动时启动。 目前,我可以通过在“启动项目”文件夹中放置/删除快捷方式来实现此目的。 但是,我想知道是否有更好的方法来处理此行为。 编辑 是的,它是Windows。抱歉,之前没有清除该内容。 该应用程序具有一个用户可以在其中触发动作的UI,并且该应用程序在运行时会定期在后台运行一些任务。 @Peter,如何在

  • 问题内容: 我想使用文件浏览器创建文本编辑器,所以当我启动应用程序时,我想在程序中在JTree上添加节点,以便它向我显示所有文件和文件夹,例如在“我的文档”文件夹中,并允许我访问这些文件和文件夹(尤其是文件夹)。我试图从这个例子中弄清楚安德鲁·汤普森是如何做到的, 但是我失败了。我使用此示例为“我的文档”中的所有文件和文件夹创建了节点 。但这就是全部,当单击表示文件夹的节点之一时,我无法弄清楚如何

  • 我正在尝试使用简单的spring启动应用程序。我在ApplicationContext上启动应用程序时遇到问题。 2017-04-26 11:17:31.101警告14528---[main]s.c.a.AnnotationConfigApplicationContext:上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂未满足的PendencyExcepti