hermes 是一个不错的基于kafaka 的event broker,基于push模型(webhook)
测试环境使用docker-compose 运行

环境准备

  • docker-compose
 
  1. version: '3'
  1. services:
  1.  graphite:
  1.    image: nickstenning/graphite
  1.    ports:
  1.      - "80:80"
  1.      - "2003:2003"
  1.  frontend:
  1.    image: allegro/hermes-frontend
  1.    ports:
  1.      - "8080:8080"
  1.    depends_on:
  1.      - zk
  1.      - kafka
  1.      - graphite
  1.  zk:
  1.    image: wurstmeister/zookeeper:3.4.6
  1.    ports:
  1.      - "2181:2181"
  1.  kafka:
  1.    image: wurstmeister/kafka:1.1.0
  1.    ports:
  1.      - "9092:9092"
  1.    depends_on:
  1.      - zk
  1.    environment:
  1.      KAFKA_ADVERTISED_HOST_NAME: kafka
  1.      KAFKA_ADVERTISED_PORT: 9092
  1.      KAFKA_ZOOKEEPER_CONNECT: zk:2181
  1.      KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
  1.      KAFKA_DELETE_TOPIC_ENABLE: 'true'
  1.      KAFKA_BROKER_ID: 0
  1.    volumes:
  1.      - /var/run/docker.sock:/var/run/docker.sock
  1.  consumers:
  1.    image: allegro/hermes-consumers
  1.    depends_on:
  1.      - zk
  1.      - kafka
  1.      - graphite
  1.  benthos:
  1.    image: jeffail/benthos
  1.    volumes:
  1.    - "./conf/webhook.yaml:/benthos.yaml"
  1.    ports:
  1.    - "4195:4195"
  1.  management:
  1.    image: allegro/hermes-management
  1.    ports:
  1.      - "8090:8090"
  1.    depends_on:
  1.      - zk
  1.      - kafka
  1.      - graphite
 
 
  • 运行
  1. docker-compose up -d
 
  • webhook 服务
    webhook 服务使用benthos,配置如下
 
  1. input:
  1.  type: broker
  1.  broker:
  1.    inputs:
  1.      - type: http_server
  1.        http_server:
  1.          path: /
  1.        processors:
  1.          - type: text
  1.            text:
  1.              operator: prepend
  1.              value: "get message: "
  1. output:
  1.  type: stdout
 
 
  • 参考架构图
  • 组件说明
    frontend 进行消息发送
    consumers 消息订阅
    manger 管理主题以及订阅
    message store 存储以及路由消息当前支持的是kafka
    medata store 共享状态,当前使用的是zk
    metrics store 可选的,存储metrics 信息,当前是graphite
    tracking store 存储追踪信息,当前是es

测试

  • 创建group && topic
    注意应该使用management 的rest api 地址,对应docker 环境为8090 端口,注意topic的格式
    应该为 groupname.topicname
 
  1. group:
  1. curl -X POST -H "Content-Type: application/json" http://localhost:8090/groups -d '{"groupName": "dalong"}'
  1. topic:
  1. curl -X POST -H "Content-Type: application/json" http://localhost:8090/topics -d '{
  1.    "name": "dalong.userlogin",
  1.    "description": "This is userlogin topic",
  1.    "contentType": "JSON",
  1.    "retentionTime": {
  1.        "duration": 1
  1.   },
  1.    "owner": {
  1.        "source": "Plaintext",
  1.        "id": "dalong"
  1.   }
  1. }'
 
  • 创建订阅
    注意应该使用management 的rest api 地址,对应docker 环境为8090 端口,注意topic的格式
    应该为 groupname.topicname
 
  1. curl -X POST -H "Content-Type: application/json" http://localhost:8090/topics/dalong.userlogin/subscriptions -d '{
  1.    "topicName": "dalong.userlogin",
  1.    "name": "userlogin",
  1.    "description": "This is my subscription",
  1.    "endpoint": "http://benthos:4195/",
  1.    "owner": {
  1.        "source": "Plaintext",
  1.        "id": "dalong"
  1.   }
  1. }'
 
 
  1. http://localhost:8090/topics/dalong.userlogin/subscriptions/userlogin/state
 

应该为:ACTIVE
支持的状态有:SUSPENDED,ACTIVE

  • 发送
 
  1. curl -X POST -H "Content-Type: application/json" http://localhost:8080/topics/dalong.userlogin -d '{"message": "Hello world!"}'
 
  • 查看发送消息状态
  1. docker-compose logs -f frontend benthos
 

效果

  1. Attaching to hermes-project_frontend_1, hermes-project_benthos_1
  1. benthos_1 | {"@timestamp":"2018-12-16T03:28:15Z","@service":"benthos","level":"INFO","component":"benthos","message":"Launching a benthos instance, use CTRL+C to close."}
  1. benthos_1 | {"@timestamp":"2018-12-16T03:28:15Z","@service":"benthos","level":"INFO","component":"benthos","message":"Listening for HTTP requests at: http://0.0.0.0:4195\n"}
  1. benthos_1 | get message: {"message": "Hello world!"}
 

说明

hermes 使用起来还是比较方便的,但是官方的docker-compose 对于kafaka 的配置有点问题

参考资料

https://hermes-pubsub.readthedocs.io/en/latest/
https://github.com/rongfengliang/hermes-docker-compose

hermes 试用的更多相关文章

  1. SharePoint Online 申请试用链接地址

    SharePoint Online 申请试用链接地址: https://products.office.com/en-us/business/compare-office-365-for-busine ...

  2. 活动助手Beta用户试用报告

    用户试用报告 1.面向参与者用户 1.1 日常参加各类学习(水综测)活动中,有没有遇到以下问题: (1) 信息来源混乱,不知道靠不靠谱 (2) 每次报名都要重新填写自己的学号手机号,有时候填错了就没综 ...

  3. 创建WP8试用应用

    参考资料: 创建 Windows Phone 的试用应用 如何在 Windows Phone 应用中实现试用体验 Windows Phone 7 开发 31 日谈——第23日:提供试用版应用程序 对资 ...

  4. 达梦7的试用 与SQLSERVER的简单技术对比

    达梦7的试用 与SQLSERVER的简单技术对比 达梦数据库公司推出了他们的数据库服务管理平台,可以在该平台使用达梦数据库而无须安装达梦7数据库 地址:http://online.dameng.com ...

  5. Beta版本——用户试用与调研报告

    1 引言 1.1 系统概述 ​ 毕设导师智能分配系统是一个用来简化传统手工匹配繁琐操作的系统.本系统将学生报志愿.系负责人收集整理数据.相关人员进行手工分配.反馈选择结果等繁琐的操作转移到线上.把毕设 ...

  6. 【记录】尝试用android-logging-log4j去实现log输出内容到sd卡中的文件的功能

    [背景] 折腾: [记录]给Android中添加log日志输出到文件 期间,已经试了: [记录]尝试用android中microlog4android实现log输出到文件的功能 但是不好用. 然后就是 ...

  7. 代码阅读分析工具Understand 2.0试用

    Understand 2.0是一款源代码阅读分析软件,功能强大.试用过一段时间后,感觉相当不错,确实可以大大提高代码阅读效率.由于Understand功能十分强大,本文不可能详尽地介绍它的所有功能,所 ...

  8. 如何申请国际版Office365和Azure的试用账号

    关键字:国际版.Office365.Azure.试用账号.1美元.信用卡 待续

  9. Android N preview 试用

    一.下载更新包 下载地址:https://developer.android.com/intl/zh-cn/preview/download.html 注意下载适合你手机的安装包哦 二.把你手机的oe ...

随机推荐

  1. 网页的MVC模式简介

    #! /usr/bin/env python3 # -*- coding:utf-8 -*- #MVC:Model-View-Controller 模型-视图-控制器 #Python处理URL的函数就 ...

  2. ArrayList和LinkedList有什么区别?

    ---恢复内容开始--- ArrayList和LinkedList都实现了List接口,但是: ArrayList是基于索引的数据接口,底层是数组,能够以O(1)时间复杂度随机访问元素.而Linked ...

  3. SQL-23 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列

    这题需要注意  题目描述 对所有员工的当前(to_date='9999-01-01')薪水按照salary进行按照1-N的排名,相同salary并列且按照emp_no升序排列CREATE TABLE ...

  4. how to istall virtualbox on centos

    https://tecadmin.net/install-oracle-virtualbox-on-centos-redhat-and-fedora/

  5. 如何正确认识Docker Kubernetes 和 Apache Mesos

    参考链接: http://geek.csdn.net/news/detail/229382

  6. 【Python】xml 解析

    1. XML:指可扩展标记语言,是一种标记语言,用于存储数据和传输数据,但没有像HTML那样具有预定义标签,需要程序猿自定义标签 2. XML的解析:读取XML数据结构中的某些信息,比如读取书的属性 ...

  7. 【c++基础】c++提升速度的方法总结

    参考 1. C++程序提高运行速度的方法; 2. 提高C++程序运行效率的10个简单方法; 3. C++编程中提高程序运行效率的方式(不断更新); 完

  8. day02编程语言介绍及python介绍

    编程语言介绍 机器语言:以二进制数为代码的编程语言,直接控制硬件运行 优点:执行效率非常快 缺点:以二进制数为编码编程,编程效率非常低下,掌握它需要深厚的硬件原理功底 汇编语言:将二进制编码用英文字符 ...

  9. seo:与优化相关的熊掌号

    可以做的有: 站点资源管理 天级收录(提交链接即可) 视频极速服务(暂只针对移动端体验优化)https://ziyuan.baidu.com/college/articleinfo?id=2411 原 ...

  10. Spring mvc 导出table到Excel

    /** * * @Title: exportExcel * @Description: TODO(导出到excel) * @param Page page * @return ModelAndView ...