为了对业务服务进行统一管理,同时避免网络防火墙的繁琐配置,可以采用总分结构业务系统在CSB级联发布HTTP服务。

前提条件

  • 创建专享实例
    说明 仅专享实例支持级联发布服务。
  • 您需要先提交工单,由CSB技术支持人员为您配置CSB实例的级联链路。

背景信息

业务系统总分级联结构示意如下:

HTTP 总分级联结构
说明
  • 直接级联路由:接收到HTTP级联服务请求的CSB Broker直接将请求转发给指定CSB Broker级联网关地址(格式为http://xxx:8081)。
  • 总分级联路由:接收到HTTP级联服务请求的CSB Broker根据请求HTTP头信息中的目标CSB别名,动态路由到指定目标CSB Broker网关地址。
  • 总部制定业务服务规范,各分部业务应用实现对应的服务集。也就是每个分部都会实现相同的业务服务。
  • 总部与分部之间双向HTTP服务调用。
    • 各分部业务服务发布到总部CSB实例,供总部应用访问(即:总部访问分部服务):对于每个分部业务服务,总部应用希望总部CSB实例暴露一个业务服务,根据请求业务参数,由CSB自动路由到指定的分部应用。
    • 总部业务服务发布到各分部CSB实例,供分部应用访问(即:分部访问总部服务):对于总部业务服务,总部应用希望在总部CSB实例上发布一次,即可供各分部业务应用访问。

条件与约束

  • 目前仅支持HTTP的总分级联。
  • 只支持单附件上传和下载,不支持多附件上传。
  • 总部与分部的csbConsole之间网络需要互通(端口80、443)。
  • 总部与分部的csbBroker之间的网络需要互通(端口8081、8086、9081)。
  • 要求总部与分部的VIP都绑定域名(如果没有统一DNS,则至少使用hosts绑定),以便后续管理。

级联发布流程

  1. 创建服务组

    在总部和分部的实例上创建同名的服务组。

  2. 进入级联发布页面

    级联发布和普通路由发布入口不同,需要进入统一级联发布页面级联发布服务。

  3. 分部访问总部服务

    为使分部服务访问总部服务,需要在总部CSB控制台实例上将总部服务级联发布到分部CSB实例上,且总部服务在每个分部CSB上只对应一个服务。

  4. 总部访问分部服务

    为使总部服务访问分部服务,需要在分部CSB控制台实例上将分部服务级联发布到总部CSB实例上。然后总部CSB实例识别多个分部来的级联服务请求,将同名的多个分部服务映射到一个级联服务。

创建服务组

进行级联发布之前,需要在总部和分部的实例上创建同名的服务组。

  1. 登录CSB控制台
  2. 在顶部菜单栏选择地域
  3. 在左侧导航栏选择实例列表
  4. 实例列表页面单击具体实例名称。
  5. 实例概览页面左侧导航栏中选择发布者 > 我的服务组
  6. 我的服务组页面右上角单击新建服务组
  7. 新建服务组对话框设置服务组参数,单击确认
    新建服务组

    新建服务组参数说明:

    参数 描述
    服务组名称 自定义设置服务组名称。
    服务组负责人 设置服务组的负责人。
    服务组负责任人邮件 根据实际情况设置责任人的邮件和电话,非必配项。
    服务组负责人电话
    服务组接口文件 为这个服务组上传一个JAR类型的接口文件,用于自动生成参数。
    新建服务组后,返回 我的服务组,该服务组的 状态启动,其它信息也与配置的一致。

进入级联发布页面

在级联发布服务前,需要先进入级联发布页面。

  1. 登录CSB控制台
  2. 在顶部菜单栏选择地域
  3. 在左侧导航栏单击实例列表
  4. 实例列表页面单击具体实例名称。
    注意 如果您使用共享实例,请参见 表 1使用CSB指定的共享实例,否则会导致发布失败。共享实例仅用于体验试用,不建议正式生产使用。
  5. 在实例详情页面左侧导航栏选择发布者 > 统一级联发布

分部访问总部服务

为使分部服务访问总部服务,总部业务人员在总部CSB控制台上选择总部CSB实例,将服务级联发布到分部的CSB实例上。

级联发布和单实例发布服务的流程基本一致,本文仅介绍级联发布服务的流程及需要注意的事项。

  1. 命名服务,详情请参见命名服务
    注意 所属服务组必须选择总部在总部CSB实例和分部CSB实例上创建的同名的服务组。
  2. 设置接入协议,详情请参见设置接入协议
    • 路由策略:目前仅支持直接路由
    • 接入协议:对于HTTP级联发布,则选择RESTful
    • 端点:总部业务服务的HTTP访问地址。
    • 方法:总部业务服务要求的HTTP方法,目前支持POST和GET。
    • 请求格式:普通HTTP请求或JSON请求内容。
    • 编辑入参:可以根据业务服务的入参信息,填写入参列表。也可以不填。
    • 编辑出参:可以根据业务服务的出参信息,填写出参列表。也可以不填。
  3. 设置开放协议,详情请参见设置开放协议
  4. 设置访问限制,详情请参见设置访问限制
    说明 如果想保证调用方服务的可用性,还可以配置熔断和降级,详情请参见 如何使用熔断和降级保证调用方服务的可用性
  5. 设置目标实例。
    和普通路由发布不同,级联发布还需要设置级联发布的目标实例。在 目标实例页面勾选 服务发布目标实例,在 目标实例路由方式右侧的列表中选择 总分路由,然后单击 下一步级联发布-目标实例
  6. 发布服务页面确认设置,单击完成发布

总部访问分部服务

为使总部服务访问分部服务,分部业务人员在CSB控制台上选择分部CSB实例,将服务级联发布到总部CSB实例上。

  • 如果总部无此级联服务,按现有CSB逻辑,直接新建总部的级联服务,并设置服务类型为直接路由服务。
  • 总部已有此级联服务,增加总部已有CSB级联服务的分部服务引用关系,并设置服务类型为内容路由服务。
定义路由规则(由系统根据规则生成总部级联服务路由到分部的规则):
  • 默认以HTTP Query的csbRouter参数作为路由参数。
  • 以分部CSB实例名作为csbRouter值。

级联发布和单实例发布服务的流程基本一致,本文仅介绍级联发布服务的流程及需要注意的事项。

  1. 命名服务,详情请参见命名服务
    注意 所属服务组必须选择总部在总部CSB实例和分部CSB实例上创建的同名的服务组。
  2. 设置接入协议,详情请参见设置接入协议
    • 路由策略:目前仅支持直接路由
    • 接入协议:对于HTTP级联发布,则选择RESTful
    • 端点:总部业务服务的HTTP访问地址。
    • 方法:总部业务服务要求的HTTP方法,目前支持POST和GET。
    • 请求格式:普通HTTP请求或JSON请求内容。
    • 编辑入参:可以根据业务服务的入参信息,填写入参列表。也可以不填。
    • 编辑出参:可以根据业务服务的出参信息,填写出参列表。也可以不填。
  3. 设置开放协议,详情请参见设置开放协议
  4. 设置访问限制,详情请参见设置访问限制
    说明 如果想保证调用方服务的可用性,还可以配置熔断和降级,详情请参见 如何使用熔断和降级保证调用方服务的可用性
  5. 设置目标实例。
    和普通路由发布不同,级联发布还需要设置级联发布的目标实例。在 目标实例页面勾选 服务发布目标实例,在 目标实例路由方式右侧的列表中选择 总分路由,然后单击 下一步级联发布-目标实例
  6. 发布服务页面确认设置,单击完成发布

执行结果

  • 如果该实例的拥有者将服务发布审批设置为不需要审批,发布后状态激活
  • 如果该实例的拥有者将服务发布审批设置为一级审批二级审批,则发布后状态等待一次审批等待二次审批,需要实例拥有者审批后才能激活。

后续步骤

级联发布服务成功后,您可以订阅和调用服务。
  • 订阅服务,详情请参见订阅服务
  • 调用服务因总分结构会有所不同,但都需要先下载最新版本的Java SDK,详情请参见工具包下载地址
    • 分部应用调用总部服务

      对于CSB客户端来说,与调用普通CSB服务无异,详情请参见调用服务CSB-SDK说明

    • 总部应用调用分部服务

      此场景需要总部应用发起总部CSB服务请求时,携带分部CSB路由信息。以便总部CSB根据此路由信息将请求路由到正确的分部CSB实例。所以,需要总部应用在原有CSB服务调用方式基础上增加一个HttpHeadercsbCasRouter = 分部CSB实例别名)。详情请参见调用服务

      为帮助您理解,分别列举命令行和代码两种方式的调用示例。

      • 命令行调用示例
        java -jar http-client-1.1.5.8.jar -method post -url "http://csb-broker.hq.com:8086/CSB?key1=value1" \
                -api "branch-headquarters-service1_csb_cas" -version "1.0.0"    -ak "ak1" -sk "sk1" \
                -H "csbCasRouter:b01"
      • 代码调用示例
        public void testHttp2Http() {
            HttpParameters.Builder builder = new HttpParameters.Builder();
            builder.requestURL("http://总部CSB服务地址:8086/CSB") 
                    .api("总部级联服务名") 
                    .version("1.0.0") 
                    .method("post")  
                    .accessKey("ak值").secretKey("sk值")  
                      .putHeaderParamsMap("csbCasRouter","分部CSB实例别名"); // 设置总部级联服务路由信息。
        
            // 设置HTTP FORM表单请求参数。
            builder.putParamsMap("key1", "value1");
            try {
                String ret = HttpCaller.invoke(builder.build());
                System.out.println("------- ret=" + ret);
            } catch (HttpCallerException e) {
                e.printStackTrace();
            }
        }
        说明 CSB总部服务地址即创建该实例时绑定的SLB的地址。