【问题标题】:How to use Spring AMQP with Spring Cloud Microservice如何将 Spring AMQP 与 Spring Cloud 微服务一起使用
【发布时间】:2017-01-03 06:25:27
【问题描述】:

我使用 JHipster 生成了几个基于 Spring Cloud Netflix 的微服务。目前正在考虑使用本教程在其中一项服务中添加 Spring AMQP 支持: https://spring.io/guides/gs/messaging-rabbitmq/

在服务中添加 AMQP 支持时,我发现该服务总是向 Registry(Eureka) 服务器注册,状态为 DOWN,如果我删除以下 gradle 依赖,问题就会消失

    compile('org.springframework.amqp:spring-rabbit:1.5.3.RELEASE')

具有这种依赖关系的服务在启动时会先注册到 Eureka 服务器,状态为 UP,然后立即重新注册,状态为 DOWN。

eureka registry server

Eureka服务器的日志:

2016-08-26 06:55:18.291 INFO 5875 --- [io-8761-exec-11] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 STARTING (replication=false) 2016-08-26 06:55:18.806 INFO 5875 --- [io-8761-exec-10] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 STARTING (replication=true) 2016-08-26 06:55:21.260 INFO 5875 --- [nio-8761-exec-8] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 STARTING (replication=false) 2016-08-26 06:55:21.763 INFO 5875 --- [nio-8761-exec-1] c.n.e.registry.AbstractInstanceRegistry:注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 STARTING(复制 = true) 2016-08-26 06:55:37.220 INFO 5875 --- [nio-8761-exec-3] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 UP (replication=false) 2016-08-26 06:55:37.730 INFO 5875 --- [nio-8761-exec-2] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 UP (replication=true) 2016-08-26 06:55:37.885 INFO 5875 --- [io-8761-exec-11] c.n.e.registry.AbstractInstanceRegistry : 注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 DOWN (replication=false) 2016-08-26 06:55:38.399 INFO 5875 --- [nio-8761-exec-5] c.n.e.registry.AbstractInstanceRegistry:注册实例 SALES/sales:4454c0adc6b9c70d799930ac3b7d374c 状态为 DOWN (replication=true) 2016-08-26 06:55:43.699 INFO 5875 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry:运行 evict 任务,补偿时间为 2ms 2016-08-26 06:56:43.700 INFO 5875 --- [a-EvictionTimer] c.n.e.registry.AbstractInstanceRegistry:以 2ms 的补偿时间运行驱逐任务

另一方面,Sales 服务的日志没有任何错误。但是与其他没有amqp依赖的服务相比,日志中最显着的区别是

2016-08-26 06:55:37.881 WARN 6440 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator:由于速率限制而忽略按需更新

我确认如果我删除 spring amqp 依赖项,该问题将得到解决。

我是否使用了错误的 amqp 依赖项? Spring Cloud 微服务中还有其他方法可以使用 RabbitMQ 吗?

【问题讨论】:

    标签: jhipster spring-amqp spring-cloud-netflix


    【解决方案1】:
    1. 在 Spring Boot 中,当您添加启动器依赖项时 spring-amqp-starter,框架会自动配置 相关属性的默认值。

    2. Eureka 等发现服务器使用 URL (http://{service-ip}:{service-port}/health) 检查服务 health(availability),ip和port都提供给Eureka 服务的部署,从服务调用 服务器自己注册。

    3. 如果你的 rabbit MQ 服务器没有启动并运行,那么诀窍就来了 在配置的 IP 或端口上,健康检查的响应将是 “下降”。

    结论:确保rabbit服务器启动并运行以及在类路径(Redis、Couchbase等)中具有依赖关系的任何其他组件并使用URL(http://{service-ip}:{service- port}/health) 来检查你的服务健康,你应该得到这样的东西:

    { "description": "Spring Cloud Consul Discovery Client", “状态”:“上升” }

    【讨论】:

      猜你喜欢
      • 2017-08-31
      • 2018-12-27
      • 1970-01-01
      • 2018-03-28
      • 1970-01-01
      • 2018-10-25
      • 2020-06-06
      • 1970-01-01
      • 2019-03-22
      相关资源
      最近更新 更多