Broker模块

BrokerWeEvent的核心子模块,负责事件的发布订阅以及对区块链FISCO-BCOS的访问。支持RESTfulJsonRPCSTOMPMQTT多种接入协议,也提供了Java SDK

本节介绍WeEvent的子模块Broker的详细安装步骤,部署系统之前请确认系统要求 。快速安装请参见WeEvent快速安装

以下安装以CentOS 7.2为例。

前置条件

  • 区块链FISCO-BCOS节点

    必选配置。Broker通过区块链FISCO-BCOS持久化数据。

    推荐安装FISCO-BCOS1.3.8版本。具体安装步骤,请参见FISCO-BCOS安装

  • Redis缓存

    可选配置。当多个消费者订阅同一个Topic时,Redis缓存能及时事件通知。

    推荐安装Redis5.0+版本。具体安装步骤,请参见Redis安装

  • Zookeeper服务

    可选配置。当用户使用了JsonRPC或者RESTful的订阅功能时,必须要配置Zookeeper服务。

    推荐安装Zookeeper3.4+版本。具体安装步骤,请参见Zookeeper安装

获取安装包

下载安装包weevent-broker安装包,并且解压到/usr/local/weevent/下。

$ cd /usr/local/weevent/
$ wget https://github.com/WeBankFinTech/WeEvent/releases/download/v0.9.0/weevent-broker-0.9.0.tar.gz
$ tar -zxf weevent-broker-0.9.0.tar.gz

如果机器无法访问外网wget执行失败,可以通过别的方式下载再rz上传。

解压后的目录如下:

$ cd ./weevent-broker-0.9.0
$ tree  -L 2
|-- apps
|   `-- weevent-broker-0.9.0.jar
|-- broker.sh
|-- check-service.sh
|-- conf
|   |-- applicationContext.xml
|   |-- application-prod.properties
|   |-- application.properties
|   |-- banner.txt
|   |-- ca.crt
|   |-- client.keystore
|   |-- log4j2.xml
|   |-- server.p12
|   `-- weevent.properties
|-- deploy-topic-control.sh
`-- gen-cert-key.sh

修改配置文件

  • 区块链FISCO-BCOS节点

    • 在区块链节点安装目录./web3sdk/conf拷贝ca.crt,client.keystore,applicationContext.xml并替换Broker安装目录./conf下的相同文件。

    • 查看区块链节点安装目录配置文件./node0/config.json获取channelport。并把节点访问ipchannelport填写到Broker安装配置文件./conf/applicationContext.xml中,以下示例为配置两个区块链节根据业务以此类推。

      <property name="connectionsStr">
          <list>
              <value>WeEvent@127.0.0.1:8821</value>
      	      <value>WeEvent@127.0.0.1:8822</value>
          </list>
      </property>
      

      更详细的配置文件说明,请参见Web3sdk配置说明

  • 修改合约地址

    • 部署Topic合约

      运行脚本./deploy-topic-control.sh,部署合约并得到合约地址,例如:

      $ ./deploy-topic-control.sh
      deploy contract[TopicController] success, address: 0xd99253697e61bf19206ceb4704fc9914d0a4116c
      
    • 修改配置文件

      在配置文件./conf/weevent.properties中,替换为生成的合约地址。例如:

      fisco.topic-controller.contract-address=0xd99253697e61bf19206ceb4704fc9914d0a4116c
      
    • 注意

      每部署一个新合约,使用新的合约地址相当于切换了数据视图,原来合约地址关联的数据都无法继续访问(除非切回原合约地址)。

  • 配置Broker监听端口

    配置文件./conf/application-prod.properties中server.port配置项,默认监听端口8081,根据业务需要配置。

  • 配置Redis缓存

    可选配置,为了提高WeEvent的通知性能。建议修改配置文件./conf/weevent.propertiesredis.*配置项 。

    #redis服务访问链接
    redis.server.ip=${ip}
    #redis服务访问端口
    redis.server.port=${port}
    #redis服务访问密码 为了安全,必须使用密码访问
    redis.server.password=${password}
    #基于redis的broker进程缓存容量,当缓存数据大于这个值时,使用LRU淘汰策略
    lru.cache.capacity=65536
    
  • 配置Zookeeper服务

    配置文件./conf/weevent.propertiesbroker.zookeeper.*配置项。

    #zookeeper服务访问链接 示例:127.0.0.1:8080
    broker.zookeeper.ip=${ip}:${port}
    #zookeeper上数据存储路径
    broker.zookeeper.path=/event_broker
    #连接zookeeper超时时间 单位:毫秒
    broker.zookeeper.timeout=3000
    
  • 配置IP白名单

    可选配置,为了安全起见,建议修改配置文件./conf/weevent.propertiesip.check.white-table配置项。

    #配置ip白名单,多个ip使用分号分割 示例:127.0.0.1;127.0.0.2
    ip.check.white-table=${ip}
    

    注意:ip.check.white-table默认为空,允许任何客户端IP访问。

  • 配置STOMP

    可选配置,为了安全起见,建议修改配置文件./conf/weevent.propertiesstomp.*配置项。

    #stomp协议访问用户名
    stomp.user.login=${username}
    #stomp协议访问密码
    stomp.user.passcode=${password}
    #发送心跳时间间隔 单位:秒
    stomp.heartbeats=30
    

    注意:login/passcode 默认为空,表示不校验Stomp请求不进行账号和密码校验。heartbeats为30表示

  • 配置Mosquitto代理

    配置文件./conf/weevent.propertiesmqtt.broker.*配置项。

    #mqtt代理访问链接 示例:tcp://127.0.0.1:1883
    mqtt.broker.url=tcp://${ip}:${port}
    #mqtt代理访问用户名
    mqtt.broker.user=${username}
    #mqtt代理访问密码
    mqtt.broker.password=${password}
    #消息质量0,1,2三种配置 详情见:https://www.hivemq.com/blog/mqtt-essentials-part-6-mqtt-quality-of-service-levels/
    mqtt.broker.qos=2
    #访问超时时间 单位:毫秒
    mqtt.broker.timeout=5000
    
  • 开启HTTPS功能

    可选配置,为了安全起见,建议通过HTTPS方式访问Broker服务,需要配置一个访问证书。服务采用PKCS12格式

    安装包里自带了默认证书./conf/server.p12 ,可以直接使用。用户也可以选择使用包里的./gen-cert-key.sh脚本重新生成证书。使用新证书过程如下:

    • 生成证书

      $ cd ./conf
      $ rm server.p12
      $ ../gen-cert-key.sh
      Enter keystore password:  
      Re-enter new password: 
      What is your first and last name?
        [Unknown]:  zhangsan
      What is the name of your organizational unit?
        [Unknown]:  org1       
      What is the name of your organization?
        [Unknown]:  orgname
      What is the name of your City or Locality?
        [Unknown]:  shenzhen
      What is the name of your State or Province?
        [Unknown]:  guangdong
      What is the two-letter country code for this unit?
        [Unknown]:  cn
      Is CN=zhangsan, OU=org1, O=orgname, L=shenzhen, ST=guangdong, C=cn correct?
        [no]:  y
       $ cd ..
      

      根据提示填写证书主题信息和证书密码,生成成功会替换当前证书文件./conf/server.p12

    • 修改配置文件

      参见./conf/application-prod.propertiesserver.ssl.*配置项。

      #开启https功能
      server.ssl.enabled=true
      #证书文件路径
      server.ssl.key-store=classpath:server.p12
      #证书密码
      server.ssl.key-store-password=123456
      #证书文件类型
      server.ssl.keyStoreType=PKCS12
      #key别名
      server.ssl.keyAlias=weevent
      

服务启停

  • 启动服务

    通过./broker.sh start命令启动服务,正常启动如下:

    $ ./broker.sh start
    start broker success (PID=89054)
    add the crontab job success
    

    通过./broker.sh stop命令停止服务。

    ./broker.sh start命令会启动进程,并且将进程监控命令./broker.sh monitor添加到crontab里。

    ./broker.sh stop命令在进程成功停止后会移除crontab监控任务。

  • 验证服务

    通过./check-service.sh 命令检查服务功能是否正常。

    $ ./check-service.sh
    check broker service
    broker service is ok
    

加入Nginx反向代理

WeEvent服务的所有请求都通过Nginx负载均衡接入,Nginx子模块的安装参见Nginx模块安装

如果需要部署多个进程实例,将上述步骤安装好的Broker目录打包拷贝到其他机器上,解压启动即可。

Nginx配置文件./conf/conf.d/rs.conf中, 下面为两个Broker进程的样例,然后通过Nginx重新加载配置生效。

upstream broker_backend{
    server 127.0.0.1:8081 weight=100 max_fails=3;
    server 127.0.0.2:8081 weight=100 max_fails=3;

    ip_hash;
    keepalive 1024;
}

Nginx重启命令说明

$ ./nginx -t
$ ./nginx -s reload