WeEvent¶
关于WeEvent
使用的一些常见问题和答案都会整理归档到这里。
简单的接口调用异常一般从错误码中就可以得到答案WeEvent错误码 。有任何意见和建议,欢迎你参与WeEvent
项目讨论Issues 。
怎么部署
WeEvent
和FISCO-BCOS
?建议将
WeEvent
和FISCO-BCOS
节点部署在同一网段/逻辑区,比如DMZ
区。WeEvent
的服务访问授权机制是怎么样的?WeEvent
访问权限控制基于HTTPS
+IP
白名单,STOMP
和MQTT
协议还支持协议定义的账号/密码机制。如何选择各种接入协议,
RESTful
、JsonRPC
、STOMP
还是MQTT
?协议之间的区别
STOMP
协议是WeEvent
推荐协议,关于订阅发布的所有特性,以及未来的扩展功能都会支持。JsonRPC
协议是对STOMP
协议标准功能集的一个补充。
RESTful
主要是给Web
开发使用,内置的Governance
模块就有大量使用。MQTT
主要面向物联网IoT
设备的接入。- Java程序
- 如果是
Spring
服务,有内置的org.springframework.boot:spring-boot-starter-websocket
支持,推荐使用STOMP
。 - 如果是其他
Java
程序,建议使用WeEvent
提供的Java SDK
。
- 如果是
- 其他语言
- 生产者
Producer
建议使用RESTful
/JsonRPC
,简单方便。 - 消费者
Consumer
因为涉及到事件的持续Push
,建议使用STOMP
协议接入。
- 生产者
WeEvent
服务的高可用性方案是怎么样的?WeEvent
除了订阅之外的功能,都是无状态的请求,通过多实例的负载均衡来保证高可用性。订阅功能按是否为长连接分成两类:- 使用长连接的协议,比如
STOMP
这部分功能基于长连接,订阅上下文以连接为中心,连接关闭则订阅会自动关闭。 这种属于集群Cluster
方案。WeEvent
通过Nginx
的负载均衡Load balance
实现。 - 使用短链接的协议,比如
JsonRPC
/RESTful
/MQTT
这部分功能基于短连接,事件订阅的上下文不依赖于连接,连接关闭后订阅仍然存在。 这种属于主备Replication
方案。WeEvent
通过Zookeeper
实现,如果没有为WeEvent
服务配置Zookeeper
服务,则无法使用这部分功能。
- 使用长连接的协议,比如
WeEvent
怎么处理发布事件的去重?WeEvent
不处理发布事件的去重。当服务超时或者机器宕机时,一般的逻辑是重试,这种策略很容易出现重复请求。但是整个业务系统内,不只在
WeEevnt
服务的边界会出现这种情况,任何一个服务边界都会出现。 建议业务统一处理,比如在事件内容里带一个唯一IDUUID
,消费的时候使用UUID
字段来判断该事件是否已经处理过。注意:
EventID
不是用来去重的,同一事件每成功发布一次,都会生成不同的EventID
。服务状态检查脚本
check-service.sh
出现"deploy contract failed"
- 检查
WeEvent
到FISCO-BCOS
的连接及其配置。 - 检查
FISCO-BCOS
节点是否正常出块。
- 检查
WeEvent
事件内容支持的最大长度是多少?事件内容最大长度为10 K字节
Byte
, 字符集编码为UTF8
。WeEvent
到区块链FISCO-BCOS
节点之间的网络故障怎么处理?建议为
WeEvent
配置2个属于不同网段的FISCO-BCOS
节点。这样WeEvent
服务会随机选用一个可用的节点使用,做到一定程度的网络容灾。怎么使用通配符进行订阅
WeEvent
支持通配符按层次订阅,和MQTT
的定义完全一致。包括层次分隔符”/”,单层通配符”+”,多层通配符”#”。例如,“#”可以订阅到系统内所有的主题。“com/+”可以订阅到主题“com/weevent”和“com/webank“,但是无法订阅到“com/weevent/abc”。“com/#”则可以订阅到上述三个主题。详情请参见MQTT协议。服务启动时为什么会出现Failed to initialize the client-side SSLContext错误?
javax.net.ssl.SSLException: Failed to initialize the client-side SSLContext: Input stream not contain valid certificates
这个问题涉及到
JDK
加密算法的实现。Oracle JDK
里带了这个算法实现,Open JDK
直到 1.9版本才有。所以在CentOS
系统中,如果使用Open JDK 1.9
以下版本,WeEvent
启动时会出现以下异常。请升级Open JDK
版本到1.9或者使用Oracle JDK
。如果用户使用区块链
FISCO-BCOS 1.3
,则需要注意以下问题。 在安装governance模块,需要安装WeBase 1.0.4
。具体安装步骤,请参见WeBase安装。以下两点需要特别注意:
- 由于WeBase和WeEvent端口冲突,需修改WeBase一键部署源码包中的
common.properties
文件,配置已有的区块链和服务端口。具体如下:
mgr.port=8182 front.port=8181 node.p2pPort=30300 node.channelPort=20200 node.rpcPort=8545 if.exist.fisco=yes
- 需要修改
webase-node-mgr
服务中的conf/application.yml
文件。将isUseSecurity
和isDeleteInfo
都改成false
。
- 由于WeBase和WeEvent端口冲突,需修改WeBase一键部署源码包中的