为了对业务服务进行统一管理,同时避免网络防火墙的繁琐配置,可以采用总分结构业务系统在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绑定),以便后续管理。
级联发布流程
创建服务组
进行级联发布之前,需要在总部和分部的实例上创建同名的服务组。
进入级联发布页面
在级联发布服务前,需要先进入级联发布页面。
分部访问总部服务
为使分部服务访问总部服务,总部业务人员在总部CSB控制台上选择总部CSB实例,将服务级联发布到分部的CSB实例上。
级联发布和单实例发布服务的流程基本一致,本文仅介绍级联发布服务的流程及需要注意的事项。
总部访问分部服务
为使总部服务访问分部服务,分部业务人员在CSB控制台上选择分部CSB实例,将服务级联发布到总部CSB实例上。
- 如果总部无此级联服务,按现有CSB逻辑,直接新建总部的级联服务,并设置服务类型为直接路由服务。
- 总部已有此级联服务,增加总部已有CSB级联服务的分部服务引用关系,并设置服务类型为内容路由服务。
定义路由规则(由系统根据规则生成总部级联服务路由到分部的规则):
- 默认以HTTP Query的csbRouter参数作为路由参数。
- 以分部CSB实例名作为csbRouter值。
级联发布和单实例发布服务的流程基本一致,本文仅介绍级联发布服务的流程及需要注意的事项。
执行结果
- 如果该实例的拥有者将服务发布审批设置为不需要审批,发布后状态为激活。
- 如果该实例的拥有者将服务发布审批设置为一级审批或二级审批,则发布后状态为等待一次审批或等待二次审批,需要实例拥有者审批后才能激活。
后续步骤
- 订阅服务,请参见订阅服务。
- 调用服务因总分结构会有所不同,但都需要先下载最新版本的Java SDK,请参见工具包下载地址。
- 分部应用调用总部服务
- 总部应用调用分部服务
此场景需要总部应用发起总部CSB服务请求时,携带分部CSB路由信息。以便总部CSB根据此路由信息将请求路由到正确的分部CSB实例。所以,需要总部应用在原有CSB服务调用方式基础上增加一个HttpHeader(
csbCasRouter = 分部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的地址。
- 命令行调用示例