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

使用Hystrix断路器暂停/恢复JMS侦听器

常茂
2023-03-14

我们有一个JMS监听器,它从MQ中提取消息并将它们保存在数据库中。我的问题是在db关闭时暂时暂停JMS侦听器并在一段时间后再次恢复它的最佳方法是什么。

我的想法是在db操作周围使用Spring断路器来监视它的健康状况并回退到错误处理程序方法。这将有助于避免每次都等待db超时。然而,监听器仍然在拉取消息并试图保存它们,这浪费了CPU和网络。

有没有办法处理断路器命令事件,如:开/半开/关?然后我可以编写代码,在电路开放事件发生时停止JMS,在电路半开放事件发生时启动JMS。

共有1个答案

章烨烨
2023-03-14

JMS侦听器是一个lifecyclebean,在Spring集成中也是JMS入站通道适配器。这意味着它们具有start()/stop()方法,从而允许您在不停止应用程序上下文的情况下停止使用消息。

关于断路器,我假设您说的是spring-cloud服务之一。如果是这样,那么您只需要将JMS侦听器或适配器注入到它的实现中,并调用它的start/stop方法。但这主要意味着引入断路器分布式微服务,这也意味着服务发现和其他高级特性。

如果您只运行一个带有spring integration(SI)的应用程序上下文来执行断路器操作,您可能希望从这里描述的内部SI支持中获益。

 类似资料:
  • 我刚刚读了Hystrix指南,正试图把我的头缠绕在默认断路器和恢复周期是如何操作的,然后是如何定制它们的行为。 显然,如果电路跳闸,Hystrix会自动调用该命令的方法;这一点我很理解。但是,首先要根据什么标准来使电路跳闸呢?理想情况下,我想尝试多次击打支持服务(例如,最多3次),然后我们才会认为该服务是脱机/不健康的,并跳闸断路器。我该如何实现?在哪里实现? null 所以我猜我的下一个问题部分

  • 嗨,我在camel中有一个JMS消费者路由,我的要求是在特定事件时停止/暂停该路由(基于某个字段值),然后使用调度器恢复该路由。为此,我创建了两个路由,一个是我的原始jms消费者路由,另一个是调度程序路由,它们恢复jms消费者路由,虽然我能够暂停路由,但第二个路由不恢复暂停的路由,它显示的状态为已启动。 以下是我的两条路线 请帮助我如何实现上述场景。

  • 1天前 嗨,当试图根据http://wso2.org/project/esb/java/4.0.3/docs/samples/transport_samples.html/sample250使用wso2 esb侦听来自JMS队列的消息时,我遇到了一个异常,如下所示 XML解析错误:格式不正确的位置: org.apache.axis2.axisfault:系统无法从jms://jmslistener

  • 问题内容: 我有一个基本的Swing UI,带有一个标记为“播放”的按钮。按下按钮后,标签变为“暂停”。现在,当按下按钮时,它变为“继续”。 在“播放”中,我将实例化并执行一个SwingWorker。我想要的是能够暂停该线程(不要取消该线程),并根据上述按钮按下来恢复它。但是,我不想在doInBackground()中求助于Thread.sleep()。这似乎有点骇人听闻。有什么方法可以阻止运行d

  • 我要做的是暂停< code>KafkaConsumer,如果在使用消息的过程中出现错误。 这是我写的 然后我写了一个REST服务来恢复消费者 现在,我有两个问题。第一个问题:当我打电话给消费者时。来自<code>@KafkaListener</code>注释方法的pause()会发生什么?消费者立即暂停,或者我可以接收到同一主题分区的其他偏移量上的其他消息。例如,我有偏移量为3的“message1

  • 应用程序可以使用Spring Cloud Netflix项目提供的Hystrix断路器将这个启动器包含在项目pom.xml:spring-cloud-starter-hystrix中。Hystrix不依赖于Netflix Discovery Client。@EnableHystrix注释应放置在配置类(通常是主类)上。那么方法可以用@HystrixCommand注释来被断路器保护。有关详细信息,请