- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在应用程序开始收集消息时将匿名队列绑定(bind)到扇出交换,但消息的实际处理应该稍后完成(在其他地方进行一些初始化之后)。我尝试过:
@RabbitListener(autoStartup="false",
bindings = @QueueBinding(value = @Queue,
exchange = @Exchange(name="myexchange",
type=ExchangeTypes.FANOUT)))
public void processMessage(String message) {
}
但是autoStartup="false"不会将(匿名)队列绑定(bind)到交换器。
换句话说,我需要的是应用程序启动后立即绑定(bind)到交换器的匿名队列,并仅在稍后开始读取消息。@RabbitListener 可以吗?
更新:尝试声明队列和交换,但队列不会添加到rabbit,除非我还为其声明RabbitListener:
@Configuration
public class AmqpConfig {
@Bean
RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
@Bean
public FanoutExchange fanout() {
return new FanoutExchange("myexchange");
}
private static class ReceiverConfig {
@Bean
public Queue myQueue() {
return new AnonymousQueue();
}
@Bean
public Binding binding(FanoutExchange fanout, Queue myQueue) {
return BindingBuilder.bind(myQueue).to(fanout);
}
}
除非我还添加@RabbitListener,否则它不会创建队列:
@Component
public class AmqpReceiver {
@RabbitListener(queues = "#{myQueue.name}")
public void receive(String in) throws InterruptedException {
}
}
最佳答案
由于您没有启动监听器,因此它不会打开连接。
只要您在应用程序上下文中将队列、绑定(bind)和 RabbitAdmin
定义为 beans,您所需要做的就是强制打开连接(管理员监听新连接)并执行声明)。
只需在 CachingConnectionFactory
上调用 createConnection()
即可。
编辑
@SpringBootApplication
public class So49401150Application {
public static void main(String[] args) {
SpringApplication.run(So49401150Application.class, args);
}
@Bean
ApplicationRunner runner(ConnectionFactory cf, RabbitTemplate template,
RabbitListenerEndpointRegistry registry) {
return args -> {
cf.createConnection().close(); // Admin does declarations here
template.convertAndSend("myexchange", "", "foo");
Thread.sleep(30_000);
registry.start();
};
}
@RabbitListener(autoStartup="false",
bindings = @QueueBinding(value = @Queue,
exchange = @Exchange(name="myexchange",
type=ExchangeTypes.FANOUT)))
public void processMessage(String message) {
System.out.println(message);
}
}
关于java - @RabbitListener 以 "stopped"模式开始绑定(bind)到扇出交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49401150/
我想知道在 Spring AMQP 中是否可以根据负载类型从多个类中的同一队列接收消息。 我知道在类中使用@RabbitListener 注释,然后将@RabbitHandler 放在方法上,但我想在
我正在使用@RabbitListner 注释从 RabbitMq 队列接收消息。 虽然我已经完成了执行此操作所需的所有步骤(即在我的配置类中添加 @EnableRabbit 注释)并将 SimpleR
我需要为每个登录到应用程序的用户创建一个链接到 Direct Exchange 的队列。地下室路由将是'user_' + userId。 也就是说,每次我通过用户管理队列收到用户登录的消息时。实例化一
我们在 Spring boot 应用程序中实现了rabbitMq。这就是我们定义监听器的方式。但是每当我们启动应用程序并且队列中有消息时,这些消息的消耗就会在应用程序完全启动之前开始。 @Compon
我想使用特定模式的队列名称,例如 project.{queue-name}.queue .为了保持这种模式稳固,我编写了一个辅助类来从一个简单的标识符生成这个名称。所以,foo将生成一个名为 proj
我有一个基本的 Spring Boot Web 项目,并且正在使用 Spring Tool Suite。我正在尝试使用 RabbitMQ 实现基本消息传递,但无法导入 RabbitListener 注
使用以下构造(最新版本的 Spring)时的行为是什么。我无法在文档中找到它。 @RabbitListener(queues = {"q1", "q2", "q3"}) public class My
我们的配置是:1...n 个具有共享数据库的消息接收器。消息应该只被处理一次。 @RabbitListener(bindings = @QueueBinding( val
可以使用逗号分隔的属性来定义要监听的队列吗?目的是能够在不更改代码的情况下更改队列名称和队列数量。 我在 application.properties 中定义了队列像这样: my.aggregate.
在运行时构建它的最简单方法是什么? @RabbitListener(bindings = @QueueBinding( value = @Queue(value = "providedAtRu
如何在消息(@RabbitListener)中创建有状态服务(几个@Autowire),如果是新消息,状态应该是干净的。在 @Service 的 RabbitQM(Spring AMQP) 之前,我使
当我使用 MessageListenerAdapter 处理消息时,我可以调用 SimpleMessageListenerContainer.stop() 来停止从队列中消费。但是我改用@Rabbit
在我的接收器处理了特定数量的消息后,我需要停止 Rabbit 监听器并调用一个方法,然后再次启用监听器。 @RabbitListener(...) public void sink(Message m
有没有办法优雅地停止ListenerContainer及其关联的Consumers。 我想要实现的目标。 停止消费消息。 优雅地停止ListenerContainer。 等待长时间运行的消费者,并在完
我知道可以制作 SimpleMessageListenerContainer bean 并在此处设置预取计数和消息监听器,如下所示: @Bean public SimpleMessageListene
我的问题实际上是一个后续问题 RabbitMQ Integration Test and Threading 在那里它声明包装“你的听众”并传入一个 CountDownLatch ,最终所有线程都将合
我正在 Spring-Boot 版本 1.5.4 上使用 Spring-Boot 项目,带有 spring-boot-starter-amqp , spring-boot-starter-web-se
因此,我们在 spring-amqp 中使用漂亮的 @RabbitHandler 注释来创建类似于 RestControllers 编码风格但在幕后与 Rabbit 一起使用的端点。这一切都非常漂亮和
我有一个发布事件 E1 的类 A。 E1 由使用 @RabbitListener 注释的同一应用程序中的类 B 使用。 B 做一些事情然后发布事件 E2 被 C 等消费(形成一个流程链)。 我想做的是
我设置了一个SimpleRoutingConnectionFactory,例如: @Bean @Primary public SimpleRoutingConnectionFactory routin
我是一名优秀的程序员,十分优秀!