摘要
kafka的发布订阅模式本人认为可以通过两种示例来表达:
(1)在微服务内部实现发布,在需要实用信息的微服务组件 订阅。这个方法实现较好的实现各个服务之间的解耦。
(2)单独做成一个微服务,暴露出一个发布的接口,当每个微服务有发布需求的时候直接调用这个发布接口就好。但是这就使得运维成本加大,不过服务使用方便,最关键的是开发人员在发布消息的时候需要编写的代码较少,能较好的保证编译通过。
第一种模式
1、配置
1.1 pom依赖
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.13</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.11</artifactId>
<version>0.8.2.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.4.1</version>
<scope>compile</scope>
</dependency>
1.2 yml配置
kafka:
servers: ${
kafka-address}
consumer:
auto:
commit:
interval:
ms: 100
bootstrap:
servers: ${
kafka-address}
enable:
auto:
commit: true
group:
id: xxxB
key:
deserializer: org.apache.kafka.common.serialization.StringDeserializer
maxPollRecords: 10000
session:
timeout:
ms: 30000
value:
deserializer: org.apache.kafka.common.serialization.StringDeserializer
producer:
acks: all
batch:
size: 4096
bootstrap:
servers: ${
kafka-address}
buffer:
memory: 40960
defaultTopic: Detail
key:
serializer: org.apache.kafka.common.serialization.StringSerializer