Как использовать Spring AMQP с микросервисом Spring Cloud

Я использовал JHipster для создания нескольких микросервисов на основе Spring Cloud Netflix. В настоящее время подумываю о добавлении поддержки Spring AMQP в одну из служб, используя это руководство: https://spring.io/guides/gs/messaging-rabbitmq/.

При добавлении поддержки AMQP в службы я обнаружил, что служба всегда регистрируется на сервере реестра (Eureka) со статусом DOWN, и если я удалю следующую зависимость от gradle, проблема исчезнет

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

Службы с этой зависимостью сначала зарегистрируются на сервере Eureka со статусом UP во время запуска, а затем немедленно перерегистрируются со статусом DOWN.

сервер реестра eureka

Журналы сервера Eureka:

2016-08-26 06: 55: 18.291 INFO 5875 --- [io-8761-exec-11] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр ПРОДАЖИ / продажи: 4454c0adc6b9c70d799930ac3b7d374c со статусом STARTING (репликация = false) 26-08-26 06 : 55: 18.806 INFO 5875 --- [io-8761-exec-10] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр SALES / sales: 4454c0adc6b9c70d799930ac3b7d374c со статусом STARTING (репликация = true) 2016-08-26 06: 55: 21.260 INFO 5875 --- [nio-8761-exec-8] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр ПРОДАЖИ / продажи: 4454c0adc6b9c70d799930ac3b7d374c со статусом STARTING (репликация = false) 2016-08-26 06: 55: 21.763 INFO 5875 --- [nio- 8761-exec-1] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр ПРОДАЖИ / продажи: 4454c0adc6b9c70d799930ac3b7d374c со статусом STARTING (репликация = true) 2016-08-26 06: 55: 37.220 INFO 5875 --- [nio-8761-exec-3] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр ПРОДАЖИ / продажи: 4454c0adc6b9c70d799930ac3b7d374c с status UP (replication = false) 2016-08-26 06: 55: 37.730 INFO 5875 --- [nio-8761-exec-2] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр SALES / sales: 4454c0adc6b9c70d799930ac3b7d374c со статусом UP (replication = true ) 2016-08-26 06: 55: 37.885 INFO 5875 --- [io-8761-exec-11] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр ПРОДАЖИ / продажи: 4454c0adc6b9c70d799930ac3b7d374c со статусом DOWN (репликация = false) 2016-08-26 06: 55: 38.399 INFO 5875 --- [nio-8761-exec-5] cneregistry.AbstractInstanceRegistry: Зарегистрированный экземпляр SALES / sales: 4454c0adc6b9c70d799930ac3b7d374c со статусом DOWN (репликация = true) 2016-08-26 06: 55: 43.699 INFO 5875 --- [a-EvictionTimer] cneregistry.AbstractInstanceRegistry: Запуск задачи выселения с компенсациейВремя 2 мс 2016-08-26 06: 56: 43.700 ИНФОРМАЦИЯ 5875 --- [a-EvictionTimer] cneregistry.AbstractInstanceRegistry: Запуск задачи выселения с компенсацией Время 2 мс

С другой стороны, в журнале службы продаж ошибок нет. однако по сравнению с другими службами, не зависящими от amqp, наиболее существенная разница в журнале

2016-08-26 06: 55: 37.881 WARN 6440 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator: игнорирование обновления onDemand из-за ограничителя скорости

Я подтвердил, что проблема будет устранена, если я удалю зависимость Spring amqp.

Я использую неправильную зависимость amqp? Есть ли другой способ использовать RabbitMQ в весенних облачных микросервисах?


person Tyler Shao    schedule 26.08.2016    source источник


Ответы (1)


  1. При весенней загрузке, когда вы добавляете начальную зависимость, такую ​​как spring-amqp-starter, фреймворк автоматически настраивает связанные свойства на их значения по умолчанию.

  2. Сервер обнаружения, такой как Eureka, использует URL-адрес (http: // {service-ip}: {service-port} / health) для проверки работоспособности (доступности) службы, IP и порт предоставляются Eureka во время развертывания службы. , вызов из службы совершается на сервер для регистрации.

  3. Вот и вся хитрость: если ваш сервер кролика MQ не запущен и не работает на настроенном IP или порту, ответ проверки работоспособности будет «ВНИЗ».

Заключение: убедитесь, что сервер кролика запущен и работает, а также любые другие компоненты с их зависимостями в пути к классам (Redis, Couchbase и т. Д.) И используйте URL-адрес (http: // {service-ip}: {service-port} / health), чтобы проверить работоспособность службы, вы должны получить что-то вроде этого:

{"description": "Spring Cloud Consul Discovery Client", "status": "UP"}

person Shady Ragab    schedule 08.09.2016