HttpPostman文档 原

HttpPostman自动路由组件

github地址:https://github.com/shang7053/HttpPostman

码云地址:

说明

自动路由组件,根据访问域名自动路由到真实服务上,无需事先配置,启动即可发现服务。当某一真实路径不可用时,自动移除不可用。支持轮询,直到请求成功或者全部不成功(比较耗时)。支持配置超时时间。 主要特性如下:

  • 路由模块使用node.js,基于事件驱动,最大支持每秒24000次请求,相比tomcat、nginx拥有更高的性能
  • 使用zookeeper作为服务注册中心,启动将注册信息加载到内存,并通过watcher机制进行同步,最大化减少路由模块响应耗时
  • 支持权重策略,解决硬件差异下公平路由
  • 支持GET、POST、PUT、DELETE
  • 支持表单提交和rest
  • 支持返回json、xml

架构图

流程图

网络结构图示例

模块

主要分两个部分,路由模块和sdk模块。 路由模块负责处理转发所有请求。 sdk负责注册服务信息。 中间依赖redis做注册中心。

声明:

  • sdk目前仅支持java,其他语言请自行拓展
  • 现已测试各类接口程序,但未测试返回页面的门户、管理系统等(不建议此类场景使用)

最佳实践

  • 适合http接口类应用
  • 适合k8s或任何自动伸缩导致接口应用IP经常变化的环境下使用
  • 目标不是替代任何软件,而是支持动态链接到可用的接口程序

路由模块安装

推荐使用pm2运行,推荐按CPU核数集群运行,不推荐单机单节点运行

1、下载源码

git clone https://github.com/shang7053/autorouter.git

2、执行启动命令

sh bin/start.sh

配置

进入conf文件夹,编辑arconf.json

{
  "port":3000,
  "polling":true,
  "redisDeployType":"cluster",
  "zkAddress":"172.16.40.4:2181,172.16.40.5:2181",
  "zkBasePath":"/ar/domains",
  "httpTomeOut": 2000,
  "log4js": {
    "appenders": {
      "console": {
        "type": "console"
      },
      "log_date":{
        "type": "dateFile",
        "filename": "logs/system.log",
        "alwaysIncludePattern": true,
        "pattern": "-yyyy-MM-dd-hh",
        "encoding": "utf-8"
      }
    },
    "categories": {
      "default": {
        "appenders":["console","log_date"],
        "level": "debug"
      }
    }
  }
}

sdk使用说明

进入到sdks->java->ar_client,执行

mvn clean install

然后在项目添加到pom.xml

<dependency>
	<groupId>com.scc</groupId>
	<artifactId>ar_client</artifactId>
	<version>0.0.1</version>
</dependency>

配置支持三种方式,properties、spring bean、api

arconf.properties

zk.address=172.16.40.4:2181,172.16.40.5:2181
#zk.basePath=/ar/domains
service.domain=datasyc.voole.com
#service.ip=10.5.5.1
service.port=8080
service.weight=1
service.register.interval=10

spring bean

<bean class="com.scc.ar.client.core.AutoRegistService" init-method="init" destroy-method="close">
	<property name="zkAddress" value="172.16.40.4:2181,172.16.40.5:2181" />
	<property name="serviceDomain" value="localhost" />
	<property name="serviceRegisterInterval" value="10" />
	<!-- 默认自动获取本机IP <property name="serviceIp" value="127.0.0.1" /> -->
	<property name="servicePort" value="8080" />
	<property name="serviceWeight" value="1" />
</bean>

api

AutoRegistService service = new AutoRegistService();
service.setZkAddress("172.16.40.4:2181");
service.setServiceDomain("www.baidu.net");
service.setServicePort("80");
service.setServiceWeight("2");
service.setServiceRegisterInterval("100");
service.init();

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏从流域到海域

DNS服务

DNS是域名系统(Domain Name Server)的缩写,是一种组织成域层次结构的计算机和网络命名服务系统。DNS用于TCP/IP网络(Internet)...

3608
来自专栏JAVA高级架构

高并发解决方案--负载均衡

1992
来自专栏小白课代表

PanDownload 1.5.4 回归!享受飞一样的下载体验!!!

2662
来自专栏编程

Web并发页面访问量统计实现

往期精选 页面访问量统计,可能在上学的时候就讲过如何简单实现,例如在servletContext中保存一个页页面访问次数,然后每访问一次加1;或者每访问一次就把...

7139
来自专栏PHP在线

session和cookie的辨析

session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章...

2925
来自专栏xingoo, 一个梦想做发明家的程序员

《linux c编程指南》学习手记3

6.3.1 多个进程之间的关系 进程组:getpgrp(void)用来返回进程组号 setpgid用来创建一个新的进程组或将一个进程加入另一个已存在的进程组 6...

1918
来自专栏JetpropelledSnake

MySQL学习之Can't connect to MySQL server on localhost (10061)

最近升级 了系统,开机后连接MySQL报错,Can't connect to MySQL server on localhost (10061); 估计是升级系...

3776
来自专栏TechBox

[!]The 'pods-xxx' target has libraries with conflicting name: libcrypto.a and libssl.a

2773
来自专栏实用工具入门教程

如何部署 Node.js 开发环境

Node.js是一个用于通用编程的JavaScript平台,允许用户快速构建网络应用程序。通过在前端和后端利用JavaScript,Node.js使开发更加一致...

4280
来自专栏生信技能树

github极简指南

入生信的坑已经3年多了,但开始github的旅程才一年多,起初主要是为了建立bioconductor中文社区而学习的,现在也在自己的github上面分享了不少代...

3784

扫码关注云+社区

领取腾讯云代金券