IMBroker是用于在飞书、企业微信、钉钉、微信及其他企业内部即时通讯工具之间的消息传递。它基于FaaS平台Knative实现,将消息的收和发设计为函数实现,使用FaaS的事件驱动机制进行解耦和通讯,实现对底层资源使用的最大弹性。当前代码仅为概念验证使用,无数据存储机制。

当前部署仅能用于实践FaaS事件驱动,并且只实现了将发到飞书群里的消息转发到企业微信群,至少需要完成文末第1条Issue方可生产使用。
企业自建应用事件订阅中,配置Encrypt Key权限管理中,获取如下权限:
成功安装knative的前提是必须有能下载镜像的代理服务器,否则就去找个现成的Knative吧
C:\ktoolsC:\ktools添加至OS的系统环境变量Path的最前面config.yaml如下:kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 80
hostPort: 31180
listenAddress: "0.0.0.0"
- containerPort: 30100
hostPort: 41100
listenAddress: "0.0.0.0"
kind create cluster --name knative --config .\config.yaml
docker ps
docker exec -it your-container-id bash
echo [Service] > http_proxy.conf.www
echo Environment="HTTP_PROXY=http://###.###.#.##:####" "HTTPS_PROXY=http://###.###.#.##:####" "NO_PROXY=localhost,127.0.0.1,10.96.0.0/12,192.168.0.0/16,.svc,172.17.0.0/16,172.18.0.0/16,10.0.0.0/8,171.18.0.0/16,172.28.176.0/20">>http_proxy.conf.www
mkdir /etc/systemd/system/containerd.service.d
cp http_proxy.conf.www /etc/systemd/system/containerd.service.d/http_proxy.conf
systemctl daemon-reload
systemctl restart containerd
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/broker/filter@sha256:32d368bcbabee58fad2dd84c39c1d84b6dc5b608cc599d1387add40bae41b000
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/broker/ingress@sha256:924bbc1944abb6ab91a8c3d7d6dfbb27f1e55b56ec456b9efc88e4f7320bae2f
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/controller@sha256:204fdaa828603a03b66ee30141ebf88c98881829d6af5f57c34400408d15ec91
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_controller@sha256:97d7db62ea35f7f9199787722c352091987e8816d549c3193ee5683424fef8d0
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/in_memory/channel_dispatcher@sha256:3163f0a3b3ba5b81c36357df3dd2bff834056f2943c5b395adb497fb97476d20
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/mtchannel_broker@sha256:915d73c4d00990d5db5aa1e26b54b128df025cea7b688b95af8f14e1570fb4d4
crictl pull gcr.io/knative-releases/knative.dev/eventing/cmd/webhook@sha256:65e83bd39a909fc6ce171750281660e3df2becd6c7b550b5d902d335f3379ae7
crictl pull gcr.io/knative-releases/knative.dev/net-kourier/cmd/kourier@sha256:197fbb71d1f115673a62843dd8d23a751a72d81d66e2fe8aa9d8d91452521d22
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/activator@sha256:08315309da4b219ec74bb2017f569a98a7cfecee5e1285b03dfddc2410feb7d7
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/autoscaler@sha256:105bdd14ecaabad79d9bbcb8359bf2c317bd72382f80a7c4a335adfea53844f2
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/controller@sha256:bac158dfb0c73d13ed42266ba287f1a86192c0ba581e23fbe012d30a1c34837c
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping-webhook@sha256:15f1ce7f35b4765cc3b1c073423ab8d8bf2c8c2630eea3995c610f520fb68ca0
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/domain-mapping@sha256:e384a295069b9e10e509fc3986cce4fe7be4ff5c73413d1c2234a813b1f4f99b
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/queue@sha256:813ea20d55b5063596cf967d1c63f51b9e34f883653957157b9b5341dfad0001
crictl pull gcr.io/knative-releases/knative.dev/serving/cmd/webhook@sha256:1282a399cbb94f3b9de4f199239b39e795b87108efe7d8ba0380147160a97abb
rm /etc/systemd/system/containerd.service.d/http_proxy.conf
systemctl daemon-reload
systemctl restart containerd
ip addr查看容器的eth0的IP,如172.18.0.2kn quickstart kind
127.0.0.1.sslip.io中的127.0.0.1改为桌面电脑的局域网IPkubectl edit cm config-domain --namespace knative-serving
kubectl edit service -n kourier-system kourier
externalIPs:
- 172.18.0.2
https://1cb8-223-72-47-65.ngrok.iongrok http 80
docker run --name event-gw -p 80:80 -d nginx
docker ps
docker exec -it your-container-id bash
location /的{}里改为下面两行转发配置vi /etc/nginx/conf.d/default.conf
proxy_pass http://feishu-receiver.[tenant-namespace-name].[desktop-lan-ip].sslip.io:31180;
proxy_http_version 1.1;
git clone git@github.com:songxiang/imbroker.git
cd imbroker\feishu-receiver
App IDApp SecretVerification TokenEncrypt Keydocker build -t your-docker-hub-id/imbroker-feishu-receiver .
docker push your-docker-hub-id/imbroker-feishu-receiver
cd ..\dispatcher
docker build -t your-docker-hub-id/imbroker-dispatcher .
docker push your-docker-hub-id/imbroker-dispatcher
cd ..\wxwork-robot-sender
docker build -t your-docker-hub-id/imbroker-wxwork-robot-sender .
docker push your-docker-hub-id/imbroker-wxwork-robot-sender
cd ..\feishu-receiver
b6967144-9c39-479c-97d6-25e264ff5204,作为租户id,并为其创建同名k8s namespacekubectl craete namespace b6967144-9c39-479c-97d6-25e264ff5204
kn broker create ce-broker -n b6967144-9c39-479c-97d6-25e264ff5204
kn service create feishu-receiver -n b6967144-9c39-479c-97d6-25e264ff5204 --image your-docker-hub-id/imbroker-feishu-receiver@the-digest-of-the-image-on-docker-hub --port 8080 --env-file ./.env
kn service create dispatcher -n b6967144-9c39-479c-97d6-25e264ff5204 --image your-docker-hub-id/imbroker-dispatcher@the-digest-of-the-image-on-docker-hub --port 8080
kn service create wxwork-robot-sender -n b6967144-9c39-479c-97d6-25e264ff5204 --image your-docker-hub-id/imbroker-wxwork-robot-sender@the-digest-of-the-image-on-docker-hub --port 8080
kn source binding create feishu-event --namespace b6967144-9c39-479c-97d6-25e264ff5204 --subject Service:serving.knative.dev/v1:feishu-receiver --sink http://broker-ingress.knative-eventing.svc.cluster.local/b6967144-9c39-479c-97d6-25e264ff5204/ce-broker
kn source binding create dispatcher-event --namespace b6967144-9c39-479c-97d6-25e264ff5204 --subject Service:serving.knative.dev/v1:dispatcher --sink http://broker-ingress.knative-eventing.svc.cluster.local/b6967144-9c39-479c-97d6-25e264ff5204/ce-broker
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: dispatcher-trigger
namespace: b6967144-9c39-479c-97d6-25e264ff5204
spec:
broker: ce-broker
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: dispatcher
kubectl apply -f dispatcher-trigger.yaml
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: wxwork-robot-sender-trigger
namespace: b6967144-9c39-479c-97d6-25e264ff5204
spec:
broker: ce-broker
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: wxwork-robot-sender
kubectl apply -f wxwork-robot-sender-trigger.yaml
飞书开放平台->开发者后台,在应用配置页面的事件订阅页面,配置请求网址URL为用ngrok发布的后端服务公网地址,例如https://1cb8-223-72-47-65.ngrok.io应用功能的机器人页面,打开对应功能接下来这项目还有以下开发任务,欢迎有兴趣的兄弟业余时间一起来尝试下FaaS,语言不限:D