我正在调查Apache Kafka,我的用例要求客户端能够过滤消息,并且过滤发生在代理而不是客户端上。此要求与使用JMS选择器相同。
我的理解是,虽然我可能不正确,但Kafka没有选择器,并且过滤在客户端完成。所以所有消息都发送到客户端,客户端负责过滤。
无论如何都要实现JMS Selector方法,在代理上进行过滤?
答案 0 :(得分:3)
不,你不能做那样的事情。您可以做的最好是在客户端进行过滤。 Apache Kafka API仅支持提取类型“从偏移X开始为主题N分区M提供最多1兆字节的消息”。
您可以参考Wire Protocol reference查看获取请求的可能选项,但它不包含您要查找的任何内容。
实际上,Kafka是那么快,因为每次获取只是一次顺序读取,所以我认为这不会在将来的版本中实现(但如果我错了,我会很高兴的。)。)。
答案 1 :(得分:0)
您说对了,过滤是在客户端完成的。
Spring Cloud Stream提供了一种优雅的实现方式,它支持根据以下条件将消息分发到以@StreamListener
注释的多个处理程序方法:https://docs.spring.io/spring-cloud-stream/docs/current/reference/htmlsingle/#spring-cloud-stream-overview-producing-consuming-messages