Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

mq.Message抽象设计问题 #7

Open
3 tasks done
longyue0521 opened this issue Oct 25, 2023 · 0 comments
Open
3 tasks done

mq.Message抽象设计问题 #7

longyue0521 opened this issue Oct 25, 2023 · 0 comments
Labels
question Further information is requested

Comments

@longyue0521
Copy link
Collaborator

仅限中文

在提之前请先查找已有 issues,避免重复上报。

并且确保自己已经:

  • 阅读过文档
  • 阅读过注释
  • 阅读过例子

你的问题

当前mq.Message抽象定义如下:

type Header map[string]string

// Message 是消息队列中传递的消息封装
type Message struct {
	// 消息本体,存储业务消息
	Value []byte
	// 对标kafka中的key,用于分区的。可以省略
	Key []byte
	// 对标kafka的header,用于传递一些自定义的元数据。
	Header Header
	// 消息主题
	Topic string
	// 分区ID
	Partition int64
	// 偏移量
	Offset int64
}
  1. 它同时承担着描述发送消息格式描述接收消息格式的职责.API使用者会比较懵, 发送消息时, 哪些字段是必填的,哪些字段是选填的,哪些字段是不能填写的? 比如, 是否通过修改message.Topic/Partition来向不同的主题/分区生产消息?

  2. 问题1导致了生产者接口ProduceWithPartition(ctx context.Context, m *Message, partition int) (*ProducerResult, error)中的困惑, 明明m *Message中有Partition字段,为什么还要我单独传递一个partition参数.

  3. 导致问题1、2的根本原因是当前实现是对齐kafka客户端实现的, 但后续是要支持rabbitmq、rocketmq等其他mq. 我建议趁着现在接口数量少,且功能较为核心,抓紧试验其他要支持的rabbitmq、rocketmq、nsq等,根据试验过程中的经验教训来反向迭代types.go中的抽象定义使其更加合理、更加易用.

你使用的是 mq-api 哪个版本?

你设置的的 Go 环境?

上传 go env 的结果

@longyue0521 longyue0521 added the question Further information is requested label Oct 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

1 participant