删除RabbitMQ使用者并在浏览器的RabbitMQ控制台中查看

SMF

免责声明:RabbitMq和/或Spring Integration和/或Spring Cloud Stream中的Noobie。

我有以下课程:

@Component
public class RabbitMQChannelBindingFactory {

...

  private org.springframework.cloud.stream.binder.rabbitRabbitMessageChannelBinder binder;
  private org.springframework.cloud.stream.config.BindingServiceProperties bindingServiceProperties;
  private org.springframework.cloud.stream.binding.BindingService bindingService;
  private org.springframework.beans.factory.config.ConfigurableListableBeanFactory beanFactory;
  private org.springframework.cloud.stream.binding.SubscribableChannelBindingTargetFactory bindingTargetFactory;
  private org.springframework.amqp.rabbit.connection.ConnectionFactory rabbitConnectionFactory;
...
}

需要什么?

我有创建Exchange + Queue + Consumer的机制,也有销毁它们的机制。交换和队列的自动删除设置为true。

问题是什么?

破坏所有这三个元素的继承机制不起作用。

它仅删除Exchange。队列不会被删除,因为它仍然有一个使用者,我也可以在我的应用程序中看到它。

已经尝试了什么?

我尝试使用JVisualVM来获取客户标签的String实例,然后在层次结构中向上移动以删除使用者。

我在我的应用程序中更改了org.springframework.amqp.rabbit.listener.BlockingQueueConsumer,这样它将由类加载器首先加载。

我在内部添加了以下内容,以便跟踪在我的应用程序中创建的所有使用者:

public class BlockingQueueConsumer {
  ...
  public static List<BlockingQueueConsumer> all = new ArrayList<>();
  public BlockingQueueConsumer(...) {
     ...
     all.add(this);
     ...
  }
  ...
}

完成上一步后,我在RabbitMQChannelBindingFactory类中添加了另一个方法,以为所有使用者调用cancel方法,如下所示:

class RabbitMQChannelBindingFactory {

   public void disconnect(...) {
      BlockingQueueConsumer lastBlockingQueueConsumer = 
          BlockingQueueConsumer.all.get(BlockingQueueConsumer.all.size() - 1);
      lastBlockingQueueConsumer.getConsumerTags()
          .forEach(consumerTag -> basicCancel(lastBlockingQueueConsumer, consumerTag));
   }
}

此时,在装有RabbitMQ控制台的浏览器上,我们可以看到队列已删除(除了Exchange和使用者)。

问题是什么?

我找不到将BlockingQueueConsumer连接到自动装配属性的方法。

例如我试过

  public void deleteRabbitMQConsumer() {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(rabbitConnectionFactory);
    rabbitTemplate.execute(channel -> {
      if (channel instanceof ChannelN) {
        ChannelN channelN = (ChannelN) channel;
        return true;
      }
      return false;
    });
  }

但似乎ChannelN内没有消费者。

您能给我一个方向,首先要了解什么?

或有什么资源可以帮助我?

还是有人尝试过使用此自动装配的属性取消使用方的操作?

还是我需要添加其他自动装配属性?

我已经尝试过https://stackoverflow.com/a/27633771/13622666解决方案。

解决方案

@Component
public class RabbitMQChannelBindingFactory {

...

  private org.springframework.cloud.stream.binder.rabbitRabbitMessageChannelBinder binder;

  private void connectAndDisconnectConsumer(...) {
      ...
      Binding<MessageChannel> messageChannelBinding = 
         binder.bindConsumer(exchangeName, "", channel, consumerProperties);
      ... // receive messages
      messageChannelBinding.stop(); 
     ...
   }  

}

和堆栈跟踪:

messageChannelBinding.stop();
 DefaultBinding#stop
  AbstractEndpoint#stop()
   AmqpInboundChannelAdapter#doStop
    AbstractMessageListenerContainer#stop()
     AbstractMessageListenerContainer#doStop
      AbstractMessageListenerContainer#shutdown
      SimpleMessageListenerContainer#doShutdown
       BlockingQueueConsumer#basicCancel(boolean)
阿特姆·比兰(Artem Bilan)

投票关闭。您不能滥用这样的Java类系统,而应该更加专注于学习所使用的库。可能有人已经问过您要寻找的解决方案。正如Gary所说:stop()Spring Cloud Stream上只有一个绑定,它将停止a MessageListenerContainer,这将取消队列中所有的使用者。自动删除的队列将从RabbitMQ中删除。没有理由破坏交流。尽管您可以通过进行操作AmqpAdmin.deleteExchange()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用控制台中的代码关闭浏览器控制台

来自分类Dev

如何在浏览器的开发控制台中发现 mobx 观察者的属性?

来自分类Dev

如何使用ruby控制器在浏览器控制台中打印JSON对象?

来自分类Dev

Javascript:删除浏览器控制台中输出数组的空格

来自分类Dev

使用nodeJS在RabbitMQ中删除使用者

来自分类Dev

防止在浏览器控制台中记录HTTP错误

来自分类Dev

如何防止浏览器控制台中的.load()?

来自分类Dev

在浏览器控制台中,什么是变量[[FunctionLocation]],[[Scopes]]:

来自分类Dev

防止在浏览器控制台中记录HTTP错误

来自分类Dev

使用Protractor检查浏览器控制台中是否没有错误

来自分类Dev

使用JavaScript在浏览器控制台中调用Firefox的:screenshot helper函数

来自分类Dev

使用Protractor检查浏览器控制台中是否没有错误

来自分类Dev

需要帮助使用jquery从浏览器控制台中选择标签

来自分类Dev

使用 php 运行 python 脚本 - 在控制台中而不是在 Web 浏览器中工作

来自分类Dev

RabbitMq使用者未处理消息

来自分类Dev

如果HTML中包含JS函数,如何在浏览器控制台中使用所有JS函数?

来自分类Dev

浏览器控制台中没有命令行解释器

来自分类Dev

最新版本(4.28)的Windows PgAdmin无法启动,在加载屏幕中挂起并在浏览器控制台中显示JavaScript错误

来自分类常见问题

如何使用Docker容器在浏览器中打开Rabbitmq?

来自分类Dev

在浏览器JS控制台中包含脚本时如何覆盖内容安全策略?

来自分类Dev

浏览器控制台中的Jest单元测试模块导出错误

来自分类Dev

即使在新的页面加载之后,仍可以使JavaScript在浏览器控制台中运行

来自分类Dev

如何在Chrome浏览器控制台中提交带有输入值的表单?

来自分类Dev

将调试输出打印到Symfony 2的浏览器控制台中

来自分类Dev

如何从Firefox浏览器控制台中过滤出错误?

来自分类Dev

流星集合存在于Mongo中,但在浏览器控制台中返回ReferenceError

来自分类Dev

一种阻止WebSocket错误显示在浏览器控制台中的方法

来自分类Dev

浏览器控制台中出现“找不到模块”错误消息

来自分类Dev

如何关闭Blazor中HttpClients在浏览器控制台中的“信息”登录?

Related 相关文章

  1. 1

    如何使用控制台中的代码关闭浏览器控制台

  2. 2

    如何在浏览器的开发控制台中发现 mobx 观察者的属性?

  3. 3

    如何使用ruby控制器在浏览器控制台中打印JSON对象?

  4. 4

    Javascript:删除浏览器控制台中输出数组的空格

  5. 5

    使用nodeJS在RabbitMQ中删除使用者

  6. 6

    防止在浏览器控制台中记录HTTP错误

  7. 7

    如何防止浏览器控制台中的.load()?

  8. 8

    在浏览器控制台中,什么是变量[[FunctionLocation]],[[Scopes]]:

  9. 9

    防止在浏览器控制台中记录HTTP错误

  10. 10

    使用Protractor检查浏览器控制台中是否没有错误

  11. 11

    使用JavaScript在浏览器控制台中调用Firefox的:screenshot helper函数

  12. 12

    使用Protractor检查浏览器控制台中是否没有错误

  13. 13

    需要帮助使用jquery从浏览器控制台中选择标签

  14. 14

    使用 php 运行 python 脚本 - 在控制台中而不是在 Web 浏览器中工作

  15. 15

    RabbitMq使用者未处理消息

  16. 16

    如果HTML中包含JS函数,如何在浏览器控制台中使用所有JS函数?

  17. 17

    浏览器控制台中没有命令行解释器

  18. 18

    最新版本(4.28)的Windows PgAdmin无法启动,在加载屏幕中挂起并在浏览器控制台中显示JavaScript错误

  19. 19

    如何使用Docker容器在浏览器中打开Rabbitmq?

  20. 20

    在浏览器JS控制台中包含脚本时如何覆盖内容安全策略?

  21. 21

    浏览器控制台中的Jest单元测试模块导出错误

  22. 22

    即使在新的页面加载之后,仍可以使JavaScript在浏览器控制台中运行

  23. 23

    如何在Chrome浏览器控制台中提交带有输入值的表单?

  24. 24

    将调试输出打印到Symfony 2的浏览器控制台中

  25. 25

    如何从Firefox浏览器控制台中过滤出错误?

  26. 26

    流星集合存在于Mongo中,但在浏览器控制台中返回ReferenceError

  27. 27

    一种阻止WebSocket错误显示在浏览器控制台中的方法

  28. 28

    浏览器控制台中出现“找不到模块”错误消息

  29. 29

    如何关闭Blazor中HttpClients在浏览器控制台中的“信息”登录?

热门标签

归档