如非授权,禁止用于商业用途,转载请注明出处
作者:mynewworldyyl

往下看前,建议完成前面1到9小节

1. Api网关基本特性:

Api网关作为对外网提供服务的基本入口,地位类似于NGINX,在微服务中一个重要组成部分;

Api网关需要支持如下几个最基本功能:

  a. 各种通讯协议接入,如HTTP,Socket,WebSocket;

  b. 如种语言客户端API,如JS,NodeJS,GO,C#,Java等;

  c. 负载均衡,为客户端请求在网关入口选择一个最合适的服务;

  d. 接口安全鉴权,请求的合法性较验,将非法请求拒之门外;

JMicro目录支持前三个功能。

2. JMicro Api网关模块运行

打开/jmicro.gateway/src/main/resources/META-INF/jmicro/gateway.properties文件,

#启动HTTP服务,默认是不启动HTTP服务,所以要开启,这样浏览器可通过JS直接请求服务接口
NettyHttpServer.startHttp=true #API网关作为微服的纯客户端启动,不注册服务到服务注册表 client=true #HTTP端口 NettyHttpServer.nettyPort=9090 #Socket端口 NettySocketServer.nettyPort=62688 #HTTP静态文件目录,请修改D:/opensource/github/jmicro指向合适的目录 StaticResourceHttpHandler.staticResourceRoot_dashboard=D:/opensource/github/jmicro/jmicro.monitor/jmicro.monitor.dashboard/src/main/resources/web

确保以上配置无误后,新打开一个新的CMD窗口,CD进入/jmicro.gateway,运行

mvn clean install -Pbuild-main  (只需构建一次,以后可以重复运行)

运行API网关服务

java -jar target/jmicro.gateway-0.0.1-SNAPSHOT-jar-with-dependencies.jar

确保完成 https://www.cnblogs.com/jmicro/p/10572176.html 内容,并启动provider服务

此时浏览器打开 http://172.16.0.100:9090/html/wsiotest.html (请确保IP地址是你本机的绑定主机地址,如我本机IP是172.16.0.100 ),打开的页面如下图所示

分别选择按钮,输出框显示后端对应RPC方法返回的值。

3. 切换HTTP和WebSocket传输协议

打开文件/jmicro.monitor.dashboard/src/main/resources/web/js/rpc.js,找到jmicro.config.useWs,true表示优先使用websocket,false表示只使用http,如果浏览器不支持websocket,则强制使用HTTP作为传输协议。

API接口JS使用方式,请参考/jmicro.monitor.dashboard/src/main/resources/web/html/wsiotest.html文件相关方法。

4. Java API客户端

Java API客户端支持任何Java平台,如Android

请确保/jmicro.gateway.client/target/jmicro.gateway.client-0.0.1-SNAPSHOT.jar文件在当前Classpath下面

在此使用/jmicro.example.comsumer/src/test/java/org/jmicro/example/test/TestApigateClient.java下面相关测试方法测试Java API网关接口

public class TestApigateClient {

    private ApiGatewayClient client = new ApiGatewayClient(new ApiGatewayConfig(Constants.TYPE_SOCKET));

    @Before
    public void setUp() {

        client.getConfig().setDebug(true);

        client.getConfig().setClientType(Constants.TYPE_SOCKET);
        client.getConfig().setPort(62688);

        /*client.getConfig().setPort(9090);
        client.getConfig().setClientType(Constants.TYPE_HTTP);*/
    }

    @Test
    public void testGetService() {
        ISimpleRpc srv = client.getService(ISimpleRpc.class,
                "simpleRpc", "0.0.1");
        System.out.println(srv.hello("Hello api gateway"));
    }

    @Test
    public void testCallService() {
        String[] args = new String[] {"hello"};
        String result =(String) client.callService(ISimpleRpc.class.getName(),
        "simpleRpc", "0.0.1","hello",args);
        System.out.println(result);
    }

    @Test
    public void testCallTestRpcService() {
        String[] args = new String[] {"hello"};
        String result =(String) client.callService(ITestRpcService.class.getName(),
        "testrpc", "0.0.1","subscrite",args,(msg)->{
            System.out.println("Got server msg:"+msg);
            return true;
        });
        System.out.println(result);
        JMicro.waitForShutdown();
    }

}

testCallTestRpcService是流式RPC,JMIcro所特有RPC,实现一个请求,多个返回值功能,后面会详细说明。
testGetService和testCallService分别是两种使用方式,通过API网关调用微服务方法,注意比较两者区别。

5. API网关负载均衡

请参考
【7】JMicro微服务-服务路由,负载均衡

6. 更多相关功能,后面会持续增加

【10】JMicro微服务-API网关的更多相关文章

  1. .NET Core 微服务—API网关(Ocelot) 教程 [二]

    上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...

  2. .NET Core 微服务—API网关(Ocelot) 教程 [三]

    前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...

  3. 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul

    通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...

  4. .NET Core 微服务—API网关(Ocelot) 教程 [四]

    前言: 上一篇 介绍了Ocelot网关和认证服务的结合使用,本篇继续介绍Ocelot相关请求聚合和Ocelot限流 一.请求聚合 Ocelot允许声明聚合路由,这样可以把多个正常的Routes打包并映 ...

  5. 微服务API网关

    当你选择采用微服务构建自己的程序,则你需要考虑客户端怎样与后端服务交互.对于一个单体应用,仅有一个服务群提供服务(通过负载均衡器实现).在微服务架构里面,每一个服务都暴漏了一个服务器集群.本篇文章我们 ...

  6. .NET Core 微服务—API网关(Ocelot) 教程 [一]

    前言: 最近在关注微服务,在 eShop On Containers 项目中存在一个API网关项目,引起想深入了解下它的兴趣. 一.API网关是什么 API网关是微服务架构中的唯一入口,它提供一个单独 ...

  7. 【13】JMicro微服务-ID生成与Redis

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...

  8. 【12】JMicro微服务-Zookeeper

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...

  9. 【11】JMicro微服务-配置管理

    如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...

随机推荐

  1. part1:2-嵌入式系统简单概念

    1.3个特点+1个性质:以应用为中心.软硬件可裁剪.对功能-体积-功耗等有严格要求:专用的计算机系统. 应用领域: 软硬件可裁剪,是什么结构让嵌入式系统具备了这样的特点? 嵌入式系统的体系结构:硬件: ...

  2. KOBAS

    1. What is KOBAS 3.0? KOBAS (KEGG Orthology Based Annotation System) is a web server for gene/protei ...

  3. cocos2d-x 3.4版本,videoPlayer和webView上添加sprite等cocos控件

    本帖源于小弟自己在项目过程中为了解决在cocos2d-x中实现ios里videoPlayer自定义控件的需求,所以挖出来大神的一个帖子http://www.cocoachina.com/bbs/rea ...

  4. 高性能 js -- 无阻塞加载脚本

    参考: <<高性能JavaScript>> Nicbolas C. Zakas 著 javascript代码的下载和执行过程会阻塞浏览器的其他进程, 比如页面的绘制, 遇到&l ...

  5. 2018.09.20 atcoder Building Cubes with AtCoDeer(枚举)

    传送门 有个十分显然的结论,只用枚举前后两个面就可以知道所有的面的颜色. 于是可以O(n2)O(n^2)O(n2)枚举前后两个面然后用map乱搞求贡献. 发现这样算出来会多算两倍(打表证明)于是答案除 ...

  6. Django的路由层(1)

    https://www.cnblogs.com/yuanchenqi/articles/8876685.html URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为 ...

  7. 根据数据库的表生成项目,项目变为hibernate项目(实际开发中常用)

    1.  选择模式为Myeclipse Database Explorer perpective 2. (1)右键建立mysql模板,选择默认的mysql模板 (2)drive name (任意这里取m ...

  8. qt编程遇到的东西

    setWindowFlags http://blog.chinaunix.net/uid-23500957-id-3876399.html move()方法,的作用是设置QWidget部件的pos坐标 ...

  9. Spring源码解析 - BeanFactory接口体系解读

    不知道为什么看着Spring的源码,感触最深的是Spring对概念的抽象,所以我就先学接口了. BeanFactory是Spring IOC实现的基础,这边定义了一系列的接口,我们通过这些接口的学习, ...

  10. 软件工程网络15个人作业4(201521123010徐璐琳)——alpha阶段个人总结

    一.个人总结 1. 总结自己的alpha 过程: 经过了两周的ALPHA阶段,在这之中学习到了很多,因为最开始其实是有抱着一种应付的.将就着的心理去做这个小程序,但是在完成项目的过程中,有老师和助教一 ...