请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于消息收发ack

1.课中使用apipost工具来测试RigorAck模式,需要在服务端返回seq=1的信息后再向服务端发送一条seq=2的信息。
2.那么在课程前面讲到的私聊功能中,kafka消费到一条信息后,调用client向ws server发送了一条方法为push的消息,此时还会触发ack验证吗?如果触发了ack验证,那么是否需要在task端收到seq=1的信息后再向ws server发送seq=2的消息以在这里输入代码完成ack确认?

func (m *MsgChatTransfer) Consume(ctx context.Context, key, value string) error {
	var (
		data mq.MsgChatTransfer
	)

	if err := json.Unmarshal([]byte(value), &data); err != nil {
		return err
	}

	// 记录消息
	if err := m.addChatLog(ctx, &data); err != nil {
		return err
	}

	// 这里向ws client发送了一条Method:"push"的消息,是否会触发ack验证?
	// 推送消息
	return m.svc.WsClient.Send(websocket.Message{
		FrameType: websocket.FrameData,
		Method:    "push",
		FormId:    constants.SYSTEM_ROOT_UID,
		Data:      data,
	})

	return nil
}

正在回答

1回答

这个问题我们得要看ACK机制本身的作用

我们之所以用ACK,主要是因为网络传输不可靠不信任,所以增加该机制来提高消息发送的可靠性。

而一般对于网络我们常对公网不可靠,所以在client设置ACK主要是提高其发送的可靠性,而私有内部服务一般稳定可以不用。

关于kafka监听消费者转发是否会触发ACK这个问题就需要依据自己的需求定,可以选择触发也可以选择不触发,实现的关键本质上就是某一字段的类型判断,判断它是触发还是不触发去执行逻辑就好。

所以我想这个问题我们可以从ACK本身机制的角度上思考,而程序是依据与我们创造者的设计去执行的。
0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号