簡易聊天系統-消息轉發服務器

消息轉發服務器用來接受來自消息隊列的數據,並對其進行解碼、識別等,最後分好類別。比如聊天系統,會將同一個羣組 同一個會話的消息轉發至同一組服務(當然現在還沒實現轉發同一組服務),基本思想爲羣號 QQ號之類弄一個hash然後轉發,或者監控各個服務的負載程度將新開的聊天轉移至相應的聊天服務。如果識別失敗,消息轉發服務器並不會處理消息而是將消息保留至消息隊列並提示,如果需要在線升級添加新的服務,只需要逐步升級消息轉發服務即可。

基本代碼邏輯如下:

// 處理
func DealMsg(delivery amqp.Delivery) {
	var json = jsoniter.ConfigCompatibleWithStandardLibrary
	var transfer1 transfer
	err := json.Unmarshal(delivery.Body, &transfer1)
	if err != nil {
		fmt.Println(err)
		return
	}
	//	from := transfer1.From
	var data1 Data
	// err = json.Unmarshal(transfer1.Data, &data1)
	fmt.Println((string(delivery.Body)))
	data1 = transfer1.Data
	Type := data1.Type
	//delivery.Ack(true)
	if err != nil {
		fmt.Println("json error1:", err)
		return
	}

	switch Type {
	case Login, Register, GetMyFriends, LoseConnect, AddUser, OtherAddFriend, ServerUserChangePassword:
		// 轉發給 用戶管理服務
		//	fmt.Println("發送")
		err = mq.Publish(UserControlServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	case SendUserMsg, ChatHistory, SendGroupMsg:
		// 轉發給 消息服務
		err = mq.Publish(ChatServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	case CreateGroup, GetGroupList, GetGroupMember, JoinGroup, OtherAddGroup, ServerInviteUserAddGroup:
		// 轉發給 羣組服務
		err = mq.Publish(GroupServer, delivery.Body)
		if err != nil {
			fmt.Println("RabbitMq:", err.Error())
		}
		delivery.Ack(true)
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章