vim /etc/go_emqx_exhook/config.yaml
appName: go_emqx_exhook
port: 16565
# mq类型: Rocketmq、Kafka、Rabbitmq、Redis
mqType: Rocketmq
# emqx 主题
bridgeRule:
topics:
- "/#"
# rocketmq 配置,需要提前创建 主题
rocketmqConfig:
nameServer:
- 192.168.0.188:9876
topic: emqx_exhook
tag: exhook
groupName: exhook
#accessKey: exhook
#secretKey: exhook
# rabbitmq 配置,需要提前创建 交换机 并且绑定队列
rabbitmqConfig:
addresses:
- amqp://rabbit:[email protected]:5672
exchangeName: emqx_exhook
routingKeys: exhook
# tls:
# enable: true
# tlsSkipVerify: true
# caFile: /apps/server.cer.pem
# certFile: /apps/client.cer.pem
# keyFile: /apps/client.key.pem
# kafka 配置,需要提前创建 主题
kafkaConfig:
addresses:
- 192.168.0.188:9092
topic: emqx_exhook
# sasl:
# enable: true
# user: admin
# password: admin123456
# tls:
# enable: true
# tlsSkipVerify: true
# caFile: /apps/server.cer.pem
# certFile: /apps/client.cer.pem
# keyFile: /apps/client.key.pem
# redis 配置,无需创建 stream
redisConfig:
addresses:
- 127.0.0.1:6379
streamName: emqx_exhook
db: 0
# username: redis123
# password: redis123456
# masterName: mymaster
# sentinelUsername: sentinel123456
# sentinelPassword: sentinel123456
# 发送方式 queue 或者 direct ,默认 queue
# queue: 收到消息后,转入队列,当队列内的消息数量等于阈值,批量发送到mq中
# direct: 收到消息后,立即发送到mq中
# 注: rabbitmq 和 redis 不支持队列发送
sendMethod: queue
# 队列的配置, batchSize 和 lingerTime 只要满足一个,就将消息批量发送到mq中
queue:
# 当消息数量达到100条是,批量发送到mq中
batchSize: 100
workers: 2
# 收到消息后,无论队列中的消息数量是否满足,都会在1秒内发送出去。
lingerTime: 1
grpc server 支持 tls /etc/go_emqx_exhook/config.yaml 添加以下配置
appName: go_emqx_exhook
port: 16565
# grpc 支持 tls
tls:
enable: true
caFile: certs/ca/ca.crt
certFile: certs/server/server.crt
keyFile: certs/server/server.key
Emqx > ExHook > URL: 必须以 https 开始,如: https://127.0.0.1:16565
docker run -d --name go_emqx_exhook -p 16565:16565 \
-v /etc/go_emqx_exhook/config.yaml:/apps/config.yaml \
-v /etc/localtime:/etc/localtime:ro \
--restart=always thousmile/go_emqx_exhook:1.8
vim docker-compose.yml
version: '3'
networks:
app-net1:
ipam:
config:
- subnet: 172.19.0.0/16
gateway: 172.19.0.1
services:
go_emqx_exhook:
image: thousmile/go_emqx_exhook:1.8
container_name: go_emqx_exhook
ports:
- "16565:16565"
volumes:
- /etc/go_emqx_exhook/config.yaml:/apps/config.yaml
- /etc/localtime:/etc/localtime:ro
privileged: true
restart: always
networks:
app-net1:
deploy:
resources:
limits:
memory: 258m
docker compose up -d go_emqx_exhook
根据自己的操作系统,下载相应的 可执行文件 解压缩后,在 可执行文件 同级目录下,新建 config.yaml 配置文件
## proto 生成 go 代码
protoc --go_out=. --go-grpc_out=. proto/*.proto
## golang 打包可执行文件
goreleaser --snapshot --skip-publish --clean
## 构建docker镜像
docker build -t go_emqx_exhook:1.8 ./
## 运行docker容器
docker run -d --name go_emqx_exhook -p 16565:16565 --restart=always go_emqx_exhook:1.8
## 指定配置文件
docker run -d --name go_emqx_exhook -p 16565:16565 \
-v /etc/go_emqx_exhook/config.yaml:/apps/config.yaml \
-v /etc/localtime:/etc/localtime:ro \
--restart=always thousmile/go_emqx_exhook:1.8
属性 | 描述 |
---|---|
sourceId | mqtt 消息ID |
sourceTopic | mqtt 主题 |
sourceNode | emqx 节点名称 |
sourceFrom | emqx 来自哪个mqtt客户端 |
sourceQos | mqtt qos |
sourceTimestamp | 消息时间戳 |
protocol | 此消息协议(emqx默认Header) |
peerhost | 此消息生产者IP(emqx默认Header) |
kafka-generate-ssl-automatic.sh
keytool -importkeystore -srckeystore kafka.truststore.jks -destkeystore server.p12 -deststoretype PKCS12
openssl pkcs12 -in server.p12 -nokeys -out server.cer.pem
keytool -importkeystore -srckeystore kafka.keystore.jks -destkeystore client.p12 -deststoretype PKCS12
openssl pkcs12 -in client.p12 -nokeys -out client.cer.pem
openssl pkcs12 -in client.p12 -nodes -nocerts -out client.key.pem