【发布时间】:2023-08-14 09:58:01
【问题描述】:
我正在计划开发一个基于微服务的架构应用程序,我在阅读 Ronnie Mitra 的《微服务架构》一书时决定使用 kafka 进行内部通信;马特麦克拉蒂;迈克·阿蒙森; Irakli Nadareishvili 他们说:
让微服务直接与消息代理交互(例如 RabbitMQ 等)很少是一个好主意。如果两个微服务是 通过消息队列通道直接通信,他们共享一个 数据空间(通道),我们已经详细讨论过 两个微服务共享一个数据空间的弊端。相反,我们 可以做的是将消息传递封装在一个独立的后面 可以提供消息传递能力的微服务,在一个松散的 耦合方式,连接到所有感兴趣的微服务。
我使用 Netflix Eureka 进行服务注册和发现,Zuul 作为边缘服务器和 Hystrix。 这么说,在实践中,我该如何实现那种微服务呢?如何使我的微服务独立于通信通道(在本例中为 Kafka)? 实际上我直接与频道交互,所以我的发布者/订阅者和 kafka 之间没有额外的层。
2018 年 6 月 2 日更新
更准确地说,我们有几个微服务:一个是发布关于某个主题的新闻(activemq、kafka...),另一个微服务订阅该主题并对传入的消息进行一些操作.所以我们有这些服务耦合到消息代理(到通道)......我们在我们的代码中“嵌入”了消息代理的 api,例如,如果我们想更改消息代理,我们必须更改所有使用消息代理 API 的微服务。因此,他们建议使用作为各种消息的“调度程序”的微服务(在图片中我假设是事件中心)。这样,它是唯一与通道交互的组件。
【问题讨论】:
-
你能解释一下“如果两个微服务通过消息队列通道直接通信,它们共享一个数据空间(通道)”
-
@techagrammer 我更新了问题。
标签: java spring-boot apache-kafka microservices