Потребляйте от одного брокера и производите к другому, используя Go Micro
Я пытаюсь написать микросервис, используя инфраструктуру Go Micro, которую собираюсь использовать у брокера RabbitMQ и писать в другой.
Go Micro имеет плагин RabbitMQ, однако, кажется, что если вы хотите использовать абстракции Go Micro (такие как micro.RegisterSubscriber
), нужно полагаться на множество глобальных состояний внутри библиотеки. Я закончил настройку потребителя с помощью micro.RegisterSubscriber
затем вручную создайте отдельного брокера, чтобы не использовать какое-либо внутреннее глобальное состояние (например, обмен по умолчанию), а затем вызовите broker.Publish
в функции потребителя, что означало, что я должен был маршалировать сообщение вручную перед отправкой.
Разве это не поддерживаемый шаблон в Go Micro? Есть ли лучший способ сделать что-то подобное?
Я должен отметить, что основная причина выбора Go Micro в данном конкретном случае заключается в том, что он, кажется, имеет надежную абстракцию RabbitMQ с поддержкой повторного подключения, что, похоже, трудно найти в Go, не обязательно, потому что в этом случае мне нужна была поддержка RPC.,
1 ответ
Go Micro был разработан, чтобы быть отдельным процессом на сервис и инициализировать одну абстракцию. Это дизайн для 99% использования того, как мы пишем программное обеспечение. Есть некоторые, кто хотел бы мульти-транспорт, мульти-брокер и т. Д., Но это выходит за рамки проекта, и я думаю, что кто-то другой может легко спроектировать, например, брокер, который загружает несколько брокеров, а затем переключается на основе опции или префикс.
Отдельно я разработал сервис, который загружает нескольких брокеров для объединения сообщений. Это может вас заинтересовать https://github.com/microhq/federation-srv