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

动态地将新队列、绑定和交换添加为bean

乐正晟
2023-03-14

在我看来,javaconfiguration类或基于XML的配置中的声明都是静态的。我知道如何为队列、交换或绑定设置更动态的值(例如名称),如下所示:

@Configuration
public class serverConfiguration {
   private String queueName;
   ...
   @Bean
   public Queue buildQueue() {
    Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
    buildRabbitAdmin().declareQueue(queue);
    return queue;
   }
   ...
}

但我想知道是否可以创建一个未定义数量的Queue实例,并将它们注册为bean,就像工厂注册它的所有实例一样。

我不太熟悉Spring@Bean注释及其局限性,但我尝试了

@Configuration
public class serverConfiguration {
   private String queueName;
   ...
   @Bean
   @Scope("prototype")
   public Queue buildQueue() {
    Queue queue = new Queue(this.queueName, false, false, true, getQueueArguments());
    buildRabbitAdmin().declareQueue(queue);
    return queue;
   }
   ...
}
Map<String, Queue> queueBeans = ((ListableBeanFactory) applicationContext).getBeansOfType(Queue.class);
name of the method := the last created instance.

共有1个答案

夔学智
2023-03-14

您可以将bean动态添加到上下文中:

context.getBeanFactory().registerSingleton("foo", new Queue("foo"));

但管理员不会自动声明它们;您必须调用admin.initialize()来强制它重新声明上下文中的所有AMQP元素。

您不会在@bean中执行这两个操作,而只需要执行正常的运行时java代码

 类似资料:
  • 交换:1个类型为“direct”的交换 队列:1个队列 绑定:队列绑定到Exchange 每当消息被发送到exchange时,它就会被传递到队列,辅助进程就会得到它们的任务。 每件东西都要经久耐用。 null 交换:1个具有“扇出”类型的交换 队列:n个队列,每个使用者一个 绑定:每个队列都需要绑定到Exchange 那么是谁安排了什么?在我看来: 生产者创建交换 使用者创建队列(因为它是自己的队

  • 问题内容: 我对动态绑定和静态绑定感到非常困惑。我已经读过,在编译时确定对象的类型称为静态绑定,而在运行时确定它的称为动态绑定。 下面的代码会发生什么: 静态绑定还是动态绑定? 这表明什么样的多态性? 问题答案: 您的示例是 动态绑定 ,因为在运行时确定类型是什么,并调用适当的方法。 现在假设您也具有以下两种方法: 即使您更改为 这将打印出来,因为对的调用使用 静态绑定 ,并且编译器仅知道其类型。

  • 因此,我的问题是面板被插入到JScrollPane中,这些面板的大小正在减小,但没有滚动条。 这是我的代码,我已经播种很远:

  • 问题内容: 我使用jquery fancybox 1.3.4作为弹出表单。 但是我发现fancybox无法绑定到动态添加的元素。例如,当我向当前文档中添加html元素时。 像这样:首先我使用jquery将一个元素附加到主体, 我叫fancybox, 但fancybox不适用于动态添加的元素。 我不能从此元素调用fancybox吗? 问题答案: 将fancybox(v1.3.x)绑定到动态添加的元素

  • 我有一个关于 IBM MQ 中使用的 .绑定文件的快速问题。我记得绑定文件指定队列名称。如果当前用作本地队列的队列名称后来更改为远程队列,但队列的名称保持不变并且权限也很好,则绑定文件是否正常工作?

  • 我们知道静态绑定发生在私有、静态、最终和重载的方法上,而动态绑定发生在被覆盖的方法上。但是如果我的方法只是公共的,它既不是静态的,也不是覆盖和重载的怎么办? 有人能给我解释一下print()的绑定会怎样,因为它既没有重载也没有被覆盖。