Consumer组件


要访问UBSI微服务,必须使用Consumer组件。UBSI目前只提供了Java的实现(后续会陆续提供其他语言的接口包),如果异构系统需要访问,可以使用 UBSI Gateway网关

UBSI Consumer提供的功能:

  • 统一的微服务访问接口(不依赖任何微服务Provider的实现类)
  • 支持同步/异步机制
  • 基于注册中心的服务发现和动态路由
  • 静态路由配置
  • 服务接口的仿真

一个Consumer组件的简单示例:

import rewin.ubsi.consumer.Context;

public class Test {
    public static void main(String[] args) throws Exception {
        // 启动UBSI Consumer,指定"."为当前工作目录
        Context.startup(".");
        // 创建UBSI请求对象
        Context ubsi = Context.request("ubsi.demo.hello", "hello", "consumer"); 
        // 同步方式发送请求,并等待返回结果
        String res = (String)ubsi.call();
        // 关闭UBSI Consumer
        Context.shutdown();
    }
}

关于Context类的更多说明请见 Consumer Context API

需要注意的是:如果是在一个微服务中访问其他的微服务,请不要直接使用Consumer组件的Context.request()来创建请求对象,应该使用容器提供的ServiceContext的request()方法,ServiceContext封装了容器中的Consumer组件,可以保证服务依赖、访问链路以及事务传播的有效性。另外,也不需要进行Context的startup/shutdown操作,容器启动时已经完成了Consumer组件的准备工作。

关于ServiceContext类的更多说明请见 Service Context API

Consumer的运行参数配置

Consumer的运行参数保存在配置文件rewin.ubsi.consumer.json中,一个简单的样例如下:

{
  "io_threads": 4,
  "timeout_connect": 5,
  "timeout_request": 10,
  "timeout_reconnect": 600,

  "redis_host": "{redis-server-address}",
  "redis_port": 6379,
  "redis_conn_idle": 2,
  "redis_conn_max": 16,
}
  • io_thread

    Consumer组件用来处理socket I/O的线程数,0表示默认设置(CPU内核数*2)

  • timeout_connect

    向服务容器发起socket连接时的缺省超时时间,秒数

  • timeout_request

    服务请求的缺省超时时间,秒数

  • timeout_reconnect

    发现容器/redis服务节点失效后,再次重试的时间间隔,秒数

  • redis_host | redis_port

    redis服务的地址和端口

  • redis_conn_idle

    redis连接池的最大空闲数量

  • redis_conn_max

    redis连接池的最大数量

上面的配置是针对redis单节点模式,如果部署了多节点的"哨兵"模式,需要设置redis_master_name和redis_sentinel_addr;

对于容器和WebApp,Consumer的运行参数可以通过UBSI治理工具进行动态配置

Consumer的静态路由配置

Consumer的静态路由保存在配置文件rewin.ubsi.router.json中,一个样例如下:

[
  {
    "Service": "ubsi.demo.*",
    "Nodes": [
      {
        "Host": "localhost",
        "Port": 7112,
        "Weight": 2
      },
      {
        "Host": "localhost",
        "Port": 7113,
        "Weight": 1
      }
    ]
  }
]

这个路由配置表示:所有以"ubsi.demo."开头的微服务的访问请求都按照2:1的比例分别发送到"localhost#7112"和"localhost#7113"两个容器。如果将某个容器的Weight设置为0(默认值为1),表示这是一个"备用"容器,只有当另一个容器失效后才会启用。

需要注意同时存在动态路由和静态路由时,静态路由的优先级在动态路由之上

对于容器和WebApp,Consumer的静态路由可以通过UBSI治理工具进行动态配置

results matching ""

    No results matching ""