在RocketMQ Java Client的实现里面,代码耦合了大量的admin方面的功能, 其为了尽可能的提高代码复用率,代码的依赖关系较为复杂、接口的设计比 较重、语义的界限不够清晰。因此,为了避免简单的对Java代码进行翻译,故Go客户端进行了重新的设计,剥离了admin相关的逻辑。整体如上面的图所示,在逻辑层次上,按照请求 顺序,从下到上总共分为三层:
Sync/Async/Oneway
三个接口,所以对于特定的Request/Response、连接的管理、路由等信息的处理和维护、 其它producer/consumer
共用的逻辑,均在这里实现。queue selector
, consume balance
, offset storage
等。除了基础的数据结构外,producer和consumer之间内部的代码不能进行复用。Deprecated
NewRemotingCommand(code int16, header CustomHeader) *RemotingCommand // send a request to servers and return until response received. SendMessageSync(ctx context.Context, brokerAddrs, brokerName string, request *SendMessageRequest, msgs []*Message) (*SendResult, error) SendMessageAsync(ctx context.Context, brokerAddrs, brokerName string, request *SendMessageRequest, msgs []*Message, f func(result *SendResult)) error SendMessageOneWay(ctx context.Context, brokerAddrs string, request *SendMessageRequest, msgs []*Message) (*SendResult, error)
All struct needed has been defined in codebase.
// PullMessage with sync SendMessage(topic string, msgs *[]Message) error // SendMessageAsync send message with batch by async SendMessageAsync(topic string, msgs *[]Message, f func(result *SendResult)) error // PullMessage with sync PullMessage(ctx context.Context, brokerAddrs string, request *PullMessageRequest) (*PullResult, error) // PullMessageAsync pull message async func PullMessageAsync(ctx context.Context, brokerAddrs string, request *PullMessageRequest, f func(result *PullResult)) error // QueryMaxOffset with specific queueId and topic QueryMaxOffset(topic string, queueId int) error // QueryConsumerOffset with specific queueId and topic of consumerGroup QueryConsumerOffset(consumerGroup, topic string, queue int) (int64, error) // SearchOffsetByTimestamp with specific queueId and topic SearchOffsetByTimestamp(topic string, queue int, timestamp int64) (int64, error) // UpdateConsumerOffset with specific queueId and topic UpdateConsumerOffset(consumerGroup, topic string, queue int, offset int64) error
for more details about features: feature-list