使用 kafka 实现 websocket 扫码登录,现在测试遇到个问题: kafka 部署在服务器上,使用外置 zookeeper, 服务器和本地分别启动应用, 本地应用可以监听到服务器发送的消息, 服务器获取不到本地发送的 topic 消息。
求教诸位 V2er :)
1
hunterzhang86 2019-07-30 11:39:50 +08:00 1
什么错都没报吗?理论上这种网络的问题可能性比较大。
|
2
ligudo OP @hunterzhang86 嗯,没有报错信息。郁闷,猜想也是网络问题,还没定位到原因
|
3
dooonabe 2019-07-30 12:06:02 +08:00 via Android 1
能贴个架构图吗
|
4
fireapp 2019-07-30 12:16:56 +08:00 via iPhone 1
大概是配置问题,你看看 advertised.listeners,配置的啥,这个是给客户端用的,不一致的话服务端不接受消息,只有空 topic
|
5
hunterzhang86 2019-07-30 12:17:13 +08:00 1
@ligudo 试试 telnet broker 对应的端口看通不通,还有发送的测试最好不要写 UT 的方式去发送,直接 main 方法启动 Java 进程发送比较好。
|
6
sirgod 2019-07-30 13:06:25 +08:00 1
说个题外话,看起来你们是让客户端直接连 kafka 了吗?这样不好吧?
|
8
ligudo OP 通常来讲,消息模型可以分为两种, 队列和发布-订阅式。 队列的处理方式是 一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。Kafka 为这两种模型提供了单一的消费者抽象模型: 消费者组 ( consumer group )。 消费者用一个消费者组名标记自己。 一个发布在 Topic 上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了 queue 模型。 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。 更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。
作者:半兽人 链接: https://www.orchome.com/5 来源:OrcHome 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 找到原因了伙计们,即以上所述,基础鸭。 更改前配置: spring: kafka: consumer: group-id: websocket 更改后配置: spring: kafka: consumer: group-id: ${spring.cloud.client.hostname}:${server.port}:websocket |
9
LeeSeoung 2019-07-30 15:05:52 +08:00 1
注册到同个 group 的消费者,在你 topic 只有一个分区的情况下只有一个消费者能够消费,你这个问题就是这种情况,可以在输出日志那里看到消费者有没注册成功,也可以在服务端输出消费者信息查看。。
|
10
purensong 2019-07-30 15:10:14 +08:00 1
一个 topic 不是只能给一个 consumer group 中的一个 consumer 消费吗
|
12
xaoduer 2019-07-30 16:07:36 +08:00 1
lz 应该是客户端和服务端都在订阅同一个 topic,但是该 topic 只有一个分区,于是就这样了。问题详解我看 lz 上面贴的比较清楚了
|
14
laminux29 2019-07-30 16:23:50 +08:00
题主应该是把 kafka 当成带重试与恢复的高级 rpc 用了,然后又没去 catch kafka 代码里每一处 exception,出了问题自然就不知道了。
|
16
sirgod 2019-07-30 21:16:44 +08:00
@1oNflow kafka 是后端组件,开放给客户端连接很不安全,客户端接受消息可以从客户端主动连接服务端建立长链接,或者利用长轮询机制
|