使用 Kafka 实现 STOMP 协议
Posted
技术标签:
【中文标题】使用 Kafka 实现 STOMP 协议【英文标题】:STOMP protocol implementation with Kafka 【发布时间】:2019-04-25 14:17:12 【问题描述】:我正在使用 websocket 协议和 STOMP 作为消息协议为 web 平台开发聊天模块。
这是我第一次使用任何消息代理,而 Kafka 是在公司(我正在工作的那个)网络平台上使用的,我猜对于其他模块。我刚开始时曾使用过 RabbitMQ,现在我必须切换到 Kafka。我在RabbitMQ的网站上看到有一篇关于如何使用STOMP的整篇文章,但是在Kafka的官网上却没有。
但是我已经探索了其他几个来源,许多教程,但我找不到任何与 Kafka 一起使用 STOMP 协议的相关内容,这让我问这是否可能?
这是我的 websocket 配置类:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry.addEndpoint("/ws").withSockJS();
@Override
public void configureMessageBroker(MessageBrokerRegistry registry)
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
//Here's the line I wrote to use Kafka as a MB, but doesn't work
registry.enableStompBrokerRelay("/topic").setRelayHost("localhost").setRelayPort(9092);
在启动 Kafka,然后运行我的 Java Spring 应用程序后,我从 java.io.IOException 中得到一个“由对等方重置的连接”,如果一切正常,则不应该抛出该异常。
我正在使用 Kakfa 的 2.2.0 版本,Zookeeper 的 3.4.14 版本,并使用 STS 3 作为我的 IDE。
任何帮助将不胜感激。
【问题讨论】:
看起来你可能刚刚复制了这个? medium.com/@amit.dhodi/… 或 github.com/sulthan309/… 嗯,这是基于另一个教程(你提到的两个都不是)的 websocket 配置的基本实现,但无论如何它们都几乎相同。 嗯,第二个显示了它工作的视频。所以,你身边的某个地方配置错误......你没有展示你的 Kafka 配置或其他 Spring 代码,但 Kafka 不是“中继主机” 所以你是在告诉我我有可能让它发挥作用?因为下面另一个人回答,说Kafka不支持STOMP协议。鉴于那个人的简历,我非常相信他。 我有点理解,但我不确定该解决方案是否适合我,因为我需要使用 STOMP 作为消息传递协议。因此,由于 Kafka 不可能,我将不得不回到 RabbitMQ。如果我错了,请纠正我,但我认为没有任何办法。 【参考方案1】:RabbitMQ 本身并不支持 STOMP,但它有一个 STOMP 插件; Kafka 没有对 STOMP 的内置支持。
【讨论】:
以上是关于使用 Kafka 实现 STOMP 协议的主要内容,如果未能解决你的问题,请参考以下文章
RabbitMQ 与 ActiveMQZeroMQ以及Kafka的比较