我们正在尝试使用通过kafka进行异步通信的微服务来构建平台。 以我理解的方式,在每个微服务中每个聚合类型有一个主题似乎是自然的。因此,实现用户注册的微服务将用户相关事件发布到主题" users"。 其他微服务将监听从用户"创建的事件。微服务并实现自己的逻辑并相应地填充其数据库。问题是其他微服务可能不会对用户微服务生成的所有事件感兴趣,而是对这些事件的子集感兴趣,例如UserCreated(例如,没有UsernameChanged ......)。 使用RabbitMq非常简单,因为事件处理程序是根据消息类型调用的。
答案 0 :(得分:4)
为每个标准对象操作使用不同的主题:创建,读取,更新和删除,使用“UserCreated”,“UserRead”等命名约定。如果您考虑它,您可能会有一个每个对象的不同模式。创建将需要一个有效的对象;读取将需要某种过滤器;更新您可能希望处理增量更新(将10添加到特定字段等)。
如果不同的操作具有不同的模式,则会使反序列化变得困难。如果你是一个松散的goosey语言,如JavaScript,没关系 - 没什么大不了的。但是像Scala这样的严格类型的语言在同一个主题中有不同的模式是有问题的。
它也可以解决你的问题 - 你可以准确地听取你想要的行动类型,不多也不少。