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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM