企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
#### 8.3 发送消息给消息队列 现在,worker工作池已经准备就绪了,那么就需要有一个给到worker工作池消息的入口,我们再定义一个方法 > zinx/ziface/imsghandler.go ```go //将消息交给TaskQueue,由worker进行处理 func (mh *MsgHandle)SendMsgToTaskQueue(request ziface.IRequest) { //根据ConnID来分配当前的连接应该由哪个worker负责处理 //轮询的平均分配法则 //得到需要处理此条连接的workerID workerID := request.GetConnection().GetConnID() % mh.WorkerPoolSize fmt.Println("Add ConnID=", request.GetConnection().GetConnID()," request msgID=", request.GetMsgID(), "to workerID=", workerID) //将请求消息发送给任务队列 mh.TaskQueue[workerID] <- request } ``` `SendMsgToTaskQueue()`作为工作池的数据入口,这里面采用的是轮询的分配机制,因为不同链接信息都会调用这个入口,那么到底应该由哪个worker处理该链接的请求处理,整理用的是一个简单的求模运算。用余数和workerID的匹配来进行分配。 最终将request请求数据发送给对应worker的TaskQueue,那么对应的worker的Goroutine就会处理该链接请求了。