• vernemq webhook 集成使用


    vernemq支持插件化开发,包含了lua的,以及基于webhook的,基于webhook 的好处是灵活,同时保留的钩子比较多,我们可以灵活扩展
    同时webhook可以基于多语言开发,缺点当然也有,webhook 的可靠性以及稳定性(也比较简单,扩展多集群)
    以下是关于vernemq webhook的一个试用,环境基于docker-compose 运行(webhook为了简化试用了benthos)

    系统说明

    参考部署图

    环境准备

    • docker-compose 文件
     
    version: "3"
    services:
      haproxy: 
        image: haproxytech/haproxy-debian
        networks:
          app_net:
            ipv4_address: 172.16.238.9
        volumes:
        - "./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg"
        ports:
        - "1883:1883"
        - "10080:10080"
      webhook:
        image: jeffail/benthos
        volumes:
          - "./webhook.yaml:/benthos.yaml"
        ports:
          - "4195:4195"
        networks:
          app_net:
            ipv4_address: 172.16.238.11
      mq1:
        image: vernemq/vernemq
        ports:
        - "8080:8080"
        - "8888:8888"
        environment:
          - "DOCKER_VERNEMQ_ACCEPT_EULA=yes"
          - "DOCKER_VERNEMQ_ALLOW_ANONYMOUS=on"
        networks:
          app_net:
            ipv4_address: 172.16.238.10
      mq2:
        image: vernemq/vernemq
        environment:
          - "DOCKER_VERNEMQ_ACCEPT_EULA=yes"
          - "DOCKER_VERNEMQ_ALLOW_ANONYMOUS=on"
          - "DOCKER_VERNEMQ_DISCOVERY_NODE=172.16.238.10"
        networks:
          app_net:
            ipv4_address: 172.16.238.12
      mq3:
        image: vernemq/vernemq
        environment:
          - "DOCKER_VERNEMQ_ACCEPT_EULA=yes"
          - "DOCKER_VERNEMQ_ALLOW_ANONYMOUS=on"
          - "DOCKER_VERNEMQ_DISCOVERY_NODE=172.16.238.10"
        networks:
          app_net:
            ipv4_address: 172.16.238.13
    networks:
      app_net:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: 172.16.238.0/24

    haproxy 配置

    global
        log 127.0.0.1 local2
        maxconn 4000
        # turn on stats unix socket
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
        mode tcp
        log global
        option httplog
        option dontlognull
        option http-server-close
        option forwardfor except 127.0.0.0/8
        option redispatch
        retries 3
        timeout http-request 10s
        timeout queue 1m
        timeout connect 10s
        timeout client 1m
        timeout server 1m
        timeout http-keep-alive 10s
        timeout check 10s
        maxconn 3000
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    frontend main
        bind 0.0.0.0:1883
        default_backend app
    backend app
        balance roundrobin
        server app1 172.16.238.10:1883 check
        server app2 172.16.238.13:1883 check
        server app3 172.16.238.13:1883 check
    listen stats
            bind 0.0.0.0:10080
            mode http
            log global
            maxconn 10
            timeout queue 100s
            http-request use-service prometheus-exporter if { path /metrics }
            stats enable
            stats uri /stats

    webhook 配置(基于benthos)

    input:
      type: broker
      broker:
        inputs:
          - type: http_server
            http_server:
              path: /
            processors:
              - type: text
                text:
                  operator: prepend
                  value: "get message: "
    output:
      type: stdout
    • 简单nodejs mqtt 连接
      pacakge.json
     
    {
      "name": "client",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {
        "mqtt": "^4.2.6"
      },
      "scripts": {
        "app":"node app.js"
      }
    }

    app.js

    var mqtt = require('mqtt')
    var client  = mqtt.connect('mqtt://127.0.0.1')
    client.on('connect', function () {
      client.subscribe('demoapp', function (err) {
        if (!err) {
          client.publish('presence', 'Hello mqtt')
        }
      })
    })
    client.on('message', function (topic, message) {
      // message is Buffer
      console.log(message.toString())
    })
    • 集群状态

    使用webhook

    启用webhook插件(需要进入vernemq容器操作,而且每个都需要开启)

    • 启用插件命令
    vmq-admin  plugin enable --name vmq_webhooks
    • 注册hooks
    vmq-admin webhooks register hook=on_publish endpoint="http://172.16.238.11:4195"
    vmq-admin webhooks register hook=on_subscribe endpoint="http://172.16.238.11:4195"
    • 查看hooks 信息
    vmq-admin  webhooks show

    效果

    • 发送消息

    • 查看webhook 消息

      进入benthos容器

    说明

    以上是一个简单的试用,webhook 部分试用了benthos(很强大,配置好了,可以直接进行数据写入操作),同时为了保证系统的可靠
    使用了haproxy,如果生产使用我们可以基于haproxy 的prometheus 监控能力以及vernemq暴露的监控能力方便的进行系统监控

    参考资料

    https://docs.vernemq.com/plugindevelopment/webhookplugins
    https://github.com/Jeffail/benthos
    https://www.npmjs.com/package/mqtt
    https://github.com/rongfengliang/vernemq-webhook-learnning

  • 相关阅读:
    深入理解javascript中的立即执行函数(function(){…})()
    多行文本溢出省略号显示
    JS学习思路
    canvas画圆
    软件需求与软件评估
    parawork功能使用说明
    ”0元中标的商业逻辑“ -- 如何更好防范项目风险(北京软件造价评估技术创新联盟:李培圣)
    parawork平台介绍
    基准化的软件绩效和成本度量
    jQuery对表格的操作及其他应用
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/14054526.html
Copyright © 2020-2023  润新知