【JMicro】微服务部署example.provider应用
JMicro是一个用Java语言实现的开源微服务全家桶,
源码地址:https://github.com/mynewworldyyl/jmicro,
Demo地址:http://124.70.152.7 。
功能简介: https://www.cnblogs.com/jmicro/p/13276739.html
部署实例: https://www.cnblogs.com/jmicro/p/13340783.html
在上一节部署实例基础上,这节将example.provider服务提供者部署到系统中,并通过后台服务配置页面调用服务。此实例可以根据“部署实例”从0开始操作部署,也可直接使用http://124.70.152.7 环境部署(此环境系统性能很差,需要点耐心)。
源码下载并编译
首先从 https://github.com/mynewworldyyl/jmicro 下载源码到指定目录,以${base_dir}指代根目录,
运行如下命令构建全部Jar包
cd ${base_dir}
mvn clean install -Dmaven.test.skip=true
在${base_dir}\example\example.provider\target找到jmicro-example.provider-0.0.1-SNAPSHOT-jar-with-dependencies.jar文件待用
上传可运行Jar包
以http://124.70.152.7 环境为例,在浏览器中打开此页面,右上角点LOGIN,输入用户名:jmicro,密码:jmicro123 登陆系统,只有登陆后,才可以上传Jar包及部署操作。
登陆后除了自己建立的数据外,请不要做删除和停止类的操作,特别是配置信息,以免影响系统正常运行。
选 择菜单 deployment -> resposotory --> ADD,如下图

弹出如下对话框,选择要上传的Jar文件,一定要选对如图路径下的可执行Jar文件

输入名称,默认名称和所选文件同名。如果仓库中已经存在同名文件,上传会失败,所以一定要输入一个不重名的名称,下一步部署配置时需要用到此名称。
按确定开始上传,如下图

上传成功后,在资源列表中查看如下

配置部署描述
选择deployment --> deploy desc --> ADD ,如下图所示

弹出对话框,输入如下图所示配置信息,JAR文件即为刚才上传成功的jar包文件名,勾选Enable表示启用此部署,最后加-Xmx32m -Xms8m限制一下内存,否则会因内存申请失败而部署失败。其他的选项先不用填或保持默认即可,如下图

按确定后,等待10秒左右,如下图打开进程页面,可以看到启动了新的JVM进程

服务调用
example.provider中有一个服务实现类cn.jmicro.example.rpc.impl.SimpleRpcImpl, Github地址为https://github.com/mynewworldyyl/jmicro/blob/master/example/example.provider/src/main/java/cn/jmicro/example/rpc/impl/SimpleRpcImpl.java
其中一个方法代码为
public String hi(Person person) {
if(SF.isLoggable(MC.LOG_DEBUG)) {
SF.eventLog(MC.MT_PLATFORM_LOG,MC.LOG_DEBUG,SimpleRpcImpl.class, person.getUsername());
}
return "Server say hello to: " + person.toString();
}
此方法首先往监控服务输出一条日志信息,然后返回一个字符串。参数是一个Person类实例,如下
@SO
public final class Person implements Serializable{
private String username ="Yeu";
private int id = 222;
@Override
public String toString() {
return "ID: " + this.id+", username: " + this.username;
}
}
省略了getter setter代码
我们现在开始从Web前端调用这个服务方法,选择Monitor --》 Service菜单,如下图

弹出侧栏服务列表,如下图,右上角选择Refresh刷新一下列表,刚刚部署的服务才显示出来

点选hi结点后,在编辑区打开此方法的配置,如下图

在打开的服务方法配置页面往下拖到最后,看到Testing选项卡,如下图,在Testing Args框输入 [{"username":"Zhangsan","id":"1"}],点击选项卡右上角Start按钮,方法返回值输出在Testing Result框中,如图:

可以按相同的操作步聚调用别的远程方法,注意方法参数要输正确,正确的参数可以查看Github上源码。
通过Java API调用远程服务
以Maven为例,首先在POM文件中引入如下依赖,example.api为服务接口所在项目
<dependency>
<groupId>cn.jmicro</groupId>
<artifactId>gateway.client</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.jmicro</groupId>
<artifactId>example.api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
写Java main函数直接调用RPC方法
public static void main(String[] args) {
ApiGatewayClient socketClient = new ApiGatewayClient(new ApiGatewayConfig(Constants.TYPE_HTTP,"124.70.152.7",80));
ISimpleRpc srv = socketClient.getService(ISimpleRpc.class,"simpleRpc", "0.0.1");
System.out.println(srv.hi(new Person()));
}
ApiGatewayConfig为Api网关客户端配置类,支持3个参数,分别为连接类型,支持Http和Socket,另外两个为Api网关IP和端口。ISimpleRpc为服务接口(接口,不是实现类),通过Api网关客户端取得此远程接口代理实现类,然后就可以像本地调用一样调用远程方法,完全不用关注HTTP协议细节,更不用关注Socket底层细节,完全面向Java接口及自定义参数的方法调用,当然,原生的Java 8种基本数据类型胶封装类型也是无差别支持的。
JS前端调用
在HTML头部引入JS文件
<script type="text/javascript" src="js/utils.js"></script>
<script type="text/javascript" src="js/ws.js"></script>
<script type="text/javascript" src="js/rpc.js"></script>
这几个JS文件可以在源码路径下的mng.web/public/js下找到,需要在rpc.js文件中修改API网关IP和端口,如下

JS调用ISimpleRpc的hi方法
function hi(person) {
let req = {};
req.serviceName ="cn.jmicro.example.api.rpc.ISimpleRpc"; //服务接口全名
req.namespace = "simpleRpc";//服务名称空间
req.version = "0.0.1";//服务版本
req.method = "hi"; //服务方法名称
req.args = [person]; //服务参数,一定要包装在一个数组里面
//jm.mng.callRpc返回一个Promise实例,异步返回结果
jm.mng.callRpc(req,jm.rpc.Constants.PROTOCOL_JSON, jm.rpc.Constants.PROTOCOL_JSON)
.then((msg)=>{
//异步返回结果
console.log(msg);
alert(msg);
}).catch(err =>{
throw err;
});
} //调用hi方法
hi({"username":"Zhangsan","id":"1"});
nodejs中可以使用同样的代码实现调用JMicro服务的方法
总结
1. JMicro服务可以通过后台动态部署及停止;
2. JMicro服务可以通过Java客户端及JS客户端调用,这种调用需要通过JMicro网关实现;
3. JMicro服务由服务名称,命名空间,版本唯一确定,加方法名,IP和端口唯一确定服务运行实例;
4. 如果部署JMicro有困难,可以通过http://124.70.152.7 体验;
下一节从代码级别开发一个JMicro服务,并使用此节的方法做部署及调用。
【JMicro】微服务部署example.provider应用的更多相关文章
- 【11】JMicro微服务-配置管理
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到10小节 JMicro目前仅支持基于Zookeeper做配置管理,全部配置信息可以在ZK做增删改查 ...
- 【10】JMicro微服务-API网关
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到9小节 1. Api网关基本特性: Api网关作为对外网提供服务的基本入口,地位类似于NGINX, ...
- 【2】JMicro微服务-Hello World
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. 首先完成 JMicro微服务-RPC体验 的1到5步. 按默认方式启动ZK及Redis: JDK需要Java8及以上. ...
- Chris Richardson微服务翻译:微服务部署
Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现 微服务之事件驱动的数据管理 微服务部署( ...
- docker微服务部署之:七、Rancher进行微服务扩容和缩容
docker微服务部署之:六.Rancher管理部署微服务 Rancher有两个特色用起来很方便,那就是扩容和缩容. 一.扩容前的准备工作 为了能直观的查看效果,需要修改下demo_article项目 ...
- docker微服务部署之:六、Rancher管理部署微服务
docker微服务部署之:五.利用DockerMaven插件自动构建镜像 一. 什么是Rancher Rancher是一个开源的企业级容器管理平台.通过Rancher,企业再也不必自己使用一系列的开源 ...
- 【13】JMicro微服务-ID生成与Redis
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到12小节 1. 微服务中ID地位 如果说前面小节的功能点是微服务的大脑,那么全局唯一ID则是微服务 ...
- 【12】JMicro微服务-Zookeeper
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 往下看前,建议完成前面1到11小节 1. CuratorFramework支持 JMicro目前基于Zookeeper实现统 ...
- 【8】JMicro微服务-JMicro ZKUI
ZKUI是一个开源项目,是一个查看,修改ZK数据非常方便的工具.JMicro基于ZK做服务治理,配置管理,因此使用ZKUI会提供非常大的方便. Github地址:https://github.com/ ...
随机推荐
- [CEOI1999]Parity Game 题解
P5937 [CEOI1999]Parity Game 洛谷P5937 P5937 [CEOI1999]Parity Game 前言: 个人感觉这道题初看想不到并查集啊!(说实话我题都没读懂,第二遍才 ...
- 洛谷 P4047 [JSOI2010]部落划分
这道题其实就是无线通讯网的双倍经验啦,只是在输出的时候不同罢了.还是一样的\(kruskal\)算法,但是在求的时候,应该在\(now=n-k+1\)的时候结束.本来到\(n-k\)就行了的,但是由于 ...
- SpringBoot 2.x添加Druid作为数据库连接池
整合了一大堆ORM,是时候增加一个连接池了,此处选用了druid作为连接池,druid是alibaba开源平台上的一个数据库连接池实现,对比c3p0,dbcp加入了对数据库的监控,不知道甩出几条街的距 ...
- 路由网关(Zuul)
上一篇已经讲了微服务组件中的 分布式配置中心,本章讲述 由JAVA编写的服务路由网关Zuul… - Zuul 路由是微服务体系结构的一个组成部分.例如 / 可以映射到您的Web应用程序,/api/us ...
- 学习 Spring Boot 知识看这一篇就够了
从2016年因为工作原因开始研究 Spring Boot ,先后写了很多关于 Spring Boot 的文章,发表在技术社区.我的博客和我的公号内.粗略的统计了一下总共的文章加起来大概有六十多篇了,其 ...
- Java中的过滤器
什么是过滤器(Filter)? 过滤器就是一个实现了特殊接口的Java类.实现对请求资源的过滤的功能. 过滤器是Servlet技术中最为实用的技术. 过滤器有啥用? 对目标资源进行过滤. 自动登录,解 ...
- 浏览器的回流与重绘 (Reflow & Repaint)
写在前面 在讨论回流与重绘之前,我们要知道: 浏览器使用流式布局模型 (Flow Based Layout). 浏览器会把HTML解析成DOM,把CSS解析成CSSOM,DOM和CSSOM合并就产生了 ...
- git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题
(git解决本地建立git仓库 连接远程git仓库出现拒绝合并问题) 第一步在本地创建仓库 在本地创建一个文件夹,cd 进入创建的文件夹之后 git init 创建仓库 ,ls -a 能够看到 .gi ...
- CBV源码与APIView源码解析
一.CBV源码解析 在我们写cbv的时候在url中和fbv的区别就是是否调用了as_view()方法,所以关键入手点就是这个方法 @classonlymethod # 这是类的绑定方法,这个cls是我 ...
- 006.Nginx访问控制
一 Nginx连接限制 1.1 HTTP协议的连接与请求 HTTP是建立在TCP, 一次HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上再进行HTTP请求. HTTP请求建立在一 ...