【10】JMicro微服务-API网关
如非授权,禁止用于商业用途,转载请注明出处
作者: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网关的更多相关文章
- .NET Core 微服务—API网关(Ocelot) 教程 [二]
上篇文章(.NET Core 微服务—API网关(Ocelot) 教程 [一])介绍了Ocelot 的相关介绍. 接下来就一起来看如何使用,让它运行起来. 环境准备 为了验证Ocelot 网关效果,我 ...
- .NET Core 微服务—API网关(Ocelot) 教程 [三]
前言: 前一篇文章<.NET Core 微服务—API网关(Ocelot) 教程 [二]>已经让Ocelot和目录api(Api.Catalog).订单api(Api.Ordering)通 ...
- 【微服务】之六:轻松搞定SpringCloud微服务-API网关zuul
通过前面几篇文章的介绍,我们可以轻松搭建起来微服务体系中比较重要的几个基础构建服务.那么,在本篇博文中,我们重点讲解一下,如何将所有微服务的API同意对外暴露,这个就设计API网关的概念. 本系列教程 ...
- .NET Core 微服务—API网关(Ocelot) 教程 [四]
前言: 上一篇 介绍了Ocelot网关和认证服务的结合使用,本篇继续介绍Ocelot相关请求聚合和Ocelot限流 一.请求聚合 Ocelot允许声明聚合路由,这样可以把多个正常的Routes打包并映 ...
- 微服务API网关
当你选择采用微服务构建自己的程序,则你需要考虑客户端怎样与后端服务交互.对于一个单体应用,仅有一个服务群提供服务(通过负载均衡器实现).在微服务架构里面,每一个服务都暴漏了一个服务器集群.本篇文章我们 ...
- .NET Core 微服务—API网关(Ocelot) 教程 [一]
前言: 最近在关注微服务,在 eShop On Containers 项目中存在一个API网关项目,引起想深入了解下它的兴趣. 一.API网关是什么 API网关是微服务架构中的唯一入口,它提供一个单独 ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- 【12】JMicro微服务-Zookeeper
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...
- 【11】JMicro微服务-配置管理
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...
随机推荐
- sqlserver将数据库的数据导成excel文档方法
sqlserver将数据库的数据导成excel文档方法 最近公司需要下载uniport的数据跟之前的数据进行对比,所以避免不了需要将数据库的数据导出来,把SQLServer表中的数据导出为Excel文 ...
- Can not find the tag library descriptor for "/struts-tags"`
1.查看struts.xml路径是否错误,要放在src下, 2.缺少struts-tags.tld (1)查找方式: (2)找到此包,然后右键用解压缩文件打开. (3)然后你会看到很多的源码,找到红圈 ...
- 继承方法-->原型的相互引用
function Father(){} Father.prototype.name = 'zhang'; function Son(){} function inherit(Target,Orgin) ...
- iOS的block内存管理
初始情况下: block本身.__block修饰的变量以及在block内部使用的变量都是在栈里的. __block修饰的变量的地址会作为实参传入block块内部(暂时先这么理解,实际比较复杂).blo ...
- Swift中的闭包(Closure)[转]
闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事 ...
- SPATIALINDEX_LIBRARY Cmake
https://libspatialindex.org/ QGIS:https://github.com/qgis/QGIS/blob/master/cmake/FindSpatialindex.cm ...
- pytest 常用命令行选项(一)
pytest有丰富的命令行选项,以满足不同的需要,下面对常用的命令行选项作下简单介绍. 上文已经使用过-v选项,还有很多选项,你可以使用pytest --help查看全部选项.如下图: 1.--co ...
- [Openwrt 项目开发笔记]:DDNS设置(五)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我主要讲述了如何在Openwrt上安 ...
- [Openwrt 项目开发笔记]:Samba服务&vsFTP服务(四)
[Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...
- Android 如何修改gen下包的名字
前言 当将项目中包进行重命名后,所有包名字修改了,但是在gen目录下android sdk 自动生成的包名并没有修改,如果要引用R.java 中的字段, 又得import以前的包名字. 原因 出现 ...