Go语言mongodb go语言mongo

基于go的websocket消息推送的集群实现目前websocket技术已经很成熟Go语言mongodb,选型Go语言,当然是为了节省成本以及它强大的高并发性能 。我使用的是第三方开源的websocket库即gorilla/websocket 。
由于我们线上推送的量不?。扑秃蠖诵枰渴鸲嘟诘惚3指呖捎?,所以需要自己做集群,具体架构方案如图Go语言mongodb:
Auth Service:鉴权服务,根据Token验证用户权限 。
Collect Service:消息采集服务,负责收集业务系统消息,存入MongoDB后,发送给消息分发服务 。
Dispatch Service:消息分发服务,根据路由规则分发至对应消息推送服务节点上 。
Push Service:消息推送服务,通过websocket将消息推送给用户 。
集群推送的关键点在于 , web端与服务端建立长连接之后,具体跟哪个推送节点保持长连接的 , 如果我们能够找到对应的连接节点,那么我们就可以将消息推送出去 。下面讲解一下集群的大致流程:
1. web端用户登录之后,带上token与后端推送服务(Push Service)保持长连接 。
2. 推送服务收到连接请求之后,携带token去鉴权服务(Auth Service)验证此token权限,并返回用户ID 。
3. 把返回的用户ID与长连接存入本地缓存,保持用户ID与长连接绑定关系 。
4. 再将用户ID与本推送节点IP存入redis,建立用户(即长连接)与节点绑定关系,并设置失效时间 。
5. 采集服务(Collect Service)收集业务消息,首先存入mongodb,然后将消息透传给分发服务(Dispatch Service) 。
6. 分发服务收到消息之后,根据消息体中的用户ID,从redis中获取对应的推送服务节点IP,然后转发给对应的推送节点 。
7. 推送服务节点收到消息之后,根据用户ID,从本地缓存中取出对应的长连接,将消息推送给客户端 。
其他注意事项:
golang的mongoDB的驱动mgo装不上,怎么办在MongoDB中,文档是对数据的抽象,它被使用在Client端和Server端的交互中 。所有的Client端(各种语言的Driver)都会使用这种抽象,它的表现形式就是我们常说的BSON(Binary JSON ) 。
BSON是一个轻量级的二进制数据格式 。
MongoDB能够使用BSON , 并将BSON作为数据的存储存放在磁盘中 。
当Client端要将写入文档,使用查询等等操作时,需要将文档编码为BSON格式,然后再发送给Server端 。同样,Server端的返回结果也是编码为BSON格式再放回给Client端的 。
golang使用mgo操作mongoDB遇到奇葩问题,求教package main
import (
"fmt"
"gopkg.in/mgo.v2"
"gopkg.in/mgo.v2/bson"
)
type DB struct {
Session *mgo.Session
Collection *mgo.Collection
}
type Digapp struct {
App_id string
Fetch_url string
From string //
Fetch_state bool
Fetch_priority int32 //
Create_time int64 //
Invalid bool // + app is access now ?
}
func main() {
db := new(DB)
if err := db.DBInit(); err != nil {
fmt.Println("初始化数据库失败!错误为:" + err.Error())
return
}
defer db.Close()
var digapp Digapp
//{"fetch_priority": 5, "
MongoDB 是什么 ? 能干嘛?最近在回顾mongodb的相关知识Go语言mongodb,输出一篇文章做为MongoDB知识点的总结 。
总结的目的在于回顾MongoDB的相关知识点,明确MongoDB在企业级应用中充当的角色,为之后的技术选型提供一个可查阅的信息简报 。
MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统 。没错MongoDB就是数据库,是NoSQL类型的数据库
(1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数据模型结构,其结构是面向对象的而不是二维表,存储一个用户在MongoDB中是这样子的 。

推荐阅读