多语言 - 协议接入
该功能给 EMQX 带来的扩展性十分的强大,它能以用户熟悉的编程语言处理任何的私有协议,并享受由 EMQX 系统带来的极高并发连接的优点。
- 极强的扩展能力。使用 gRPC 作为 RPC 通信框架,支持各个主流编程语言
- 完全的异步 IO。连接层以完全的异步非阻塞式 I/O 的方式实现
- 连接层透明。完全的支持 TCP\TLS UDP\DTLS 类型的连接管理,并对上层提供统一个 API
- 连接管理能力。例如,最大连接数,连接和吞吐的速率限制,IP 黑名单等
该功能提供的接口包括:
-
- 提供
Authenticate
接口。供外部模块调用,用于向集群注册客户端。 - 提供
Publish
接口。供外部模块调用,用于发布消息 EMQX Broker 中。 - 提供
Subscribe
接口。供外部模块调用,用于订阅某主题,以实现从 EMQX Broker 中接收某些下行消息。 - 提供
Unsubscribe
接口。供外部模块调用,用于取消订阅某主题。 - 调用
OnTimerTimeout
回调。用于处理定时器超时的事件。 - 调用
OnReceivedMessages
回调。用于接收下行消息(在订阅主题成功后,如果主题上有消息,便会回调该方法)
- 提供
从 gRPC 的角度上看,ExProto 会作为客户端向 服务发送回调请求。同时,它也会作为服务端向外部模块提供 ConnectionAdapter
服务,以提供 各类接口的调用。如图:
详细的设计参见:
例如,其中接口的定义有:
其步骤如下:
- 拷贝出当前版本的
lib/emqx_exproto-<x.y.z>/priv/protos/exproto.proto
文件。 - 使用对应编程语言的 gRPC 框架,生成
exproto.proto
的 gRPC 服务端的代码。 - 实现 exproto.proto 当中
ConnectionHandler
服务的接口。
开发完成后,需将该服务部署到与 EMQX 能够通信的服务器上,并保证端口的开放。
其中各个语言的 gRPC 框架可参考:
我们也提供了常见编程语言的示例程序:emqx-extension-examples (opens new window)