【发布时间】:2018-01-04 10:30:32
【问题描述】:
我有一个用兔子作为消息中间件的 spring rest 应用程序。当应用程序接受传入的休息请求时,它会回复用户,同时它会异步进行一些额外的处理,生成一条新消息并将其放在兔子身上。从那里,一些消费者读取消息并将其传递到外部系统。现在,有一种情况是兔子服务器本身可能已关闭。 为了处理这种故障,我有一个阻塞队列(当然大小可调)
@Bean
public TaskExecutor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(25);
return executor;
}
在兔子上线之前,队列将能够处理一些消息。但是如果花费的时间太长并且请求超过了队列大小,那么它将失败。现在的问题是,有没有办法可以改进它并提高效率?什么是行业最佳实践?这种情况有什么模式吗?
【问题讨论】:
-
也许是 Spring Cloud Histrix 断路器。 martinfowler.com/bliki/CircuitBreaker.html 或 spring.io/guides/gs/circuit-breaker
-
因此将消费者和生产者都包装在 Histrix 断路器中可能是有意义的。兔子连接工厂本身呢?如果无法建立连接,那么一遍遍重试也没有意义,浪费网络和服务器资源。
-
Spring cloud Stream Binder cloud.spring.io/spring-cloud-static/… 引入了持久发布-订阅语义的概念。默认情况下,RabbitMQ binder 使用 Spring Boot 的 ConnectionFactory,因此它支持 RabbitMQ 的所有 Spring Boot 配置选项。但是,以我的拙见,如果您是 Spring Cloud 新手,请先学习这门优秀的课程:udemy.com/microservices-with-spring-cloud/learn/v4/overview
标签: spring design-patterns rabbitmq integration messaging