本文将介绍javarpc的详细情况,特别是关于javarpc框架的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Dubbo(高性能、轻量级的开源Ja
本文将介绍java rpc的详细情况,特别是关于java rpc框架的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)、GRPC Java 1.4.0 发布,GRPC 的 Java 版、GRPC Java 1.5.0 发布,GRPC 的 Java 版、Grpc-Golang&Grpc-Java的知识。
本文目录一览:- java rpc(java rpc框架)
- Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)
- GRPC Java 1.4.0 发布,GRPC 的 Java 版
- GRPC Java 1.5.0 发布,GRPC 的 Java 版
- Grpc-Golang&Grpc-Java
java rpc(java rpc框架)
一、简介
Hessian和Burlap是由Caucho Technology提供的基于HTTP协议的轻量级远程服务解决方案。他们都致力于借助尽可能简单那的API和通信协议来简化Web服务。
Hession和Burlap就如同一个事物的两面,但是每一个解决方案都服务于略微不同的目的。Hession就像RMI一样,使用二进制尽心客户端和服务端的交互。但与其他二进制远程调用技术(如,RMI)不同的是,它的二进制消息可以移植到其他开发语言中(如,PHP、Python、C++、C#)。Burlap是一种基于XML的远程调用技术,这使得它可以自然而然的移植到任何能够解析XML的语言上。正因为如此,Burlap比起Hessian的二进制格式而言有更强的可读性。但,与其他基于XML的远程技术(如,SOAP、XML-RPC)不同,Burlap的消息结构尽可能的简单,不需要额外的外部定义语言(如,WSDL、IDL)。
你可能想知道如何在Hession和Burlap之间抉择,很大程度,他们是一样的。唯一的区别在于Hession的消息似乎二进制的,在带宽上更有优势,而Burlap的消息是XML的,有更好的可读性。
由于Hessian和Burlap都是基于HTTP协议的,他们都解决了RMI所头疼的防火墙渗透问题。但是当传递过来的RPC消息中包含序列化对象时,RMI就完胜Hessian和Burlap了。因为Hessian和Burlap都采用私有的序列化机制,如果数据模型非常复杂,那么Hessian和Burlap的序列化模型可能无法胜任。
二、Hession开发步骤
1、编写服务接口

1 package com.cnblogs.javalouvre.service;
2
3 public interface GreetService {
4
5 String sayHello(String name);
6
7 }

2、编写服务实现类,须继承自com.caucho.hessian.server.HessianServlet

1 package com.cnblogs.javalouvre.service;
2
3 import com.caucho.hessian.server.HessianServlet;
4
5 public class GreetServiceImpl extends HessianServlet implements GreetService {
6
7 private static final long serialVersionUID = 1880738686281295739L;
8
9 @Override
10 public String sayHello(String name) {
11 return "Hello " + name;
12 }
13
14 }

3、配置web.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
5 version="2.5">
6
7 <servlet>
8 <servlet-name>HessianServlet</servlet-name>
9 <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
10 <init-param>
11 <param-name>home-class</param-name>
12 <param-value>com.cnblogs.javalouvre.service.GreetServiceImpl</param-value>
13 </init-param>
14 <init-param>
15 <param-name>home-api</param-name>
16 <param-value>com.cnblogs.javalouvre.service.GreetService</param-value>
17 </init-param>
18 <load-on-startup>1</load-on-startup>
19 </servlet>
20
21 <servlet-mapping>
22 <servlet-name>HessianServlet</servlet-name>
23 <url-pattern>/GreetService</url-pattern>
24 </servlet-mapping>
25
26 <welcome-file-list>
27 <welcome-file>index.html</welcome-file>
28 <welcome-file>index.htm</welcome-file>
29 <welcome-file>index.jsp</welcome-file>
30 </welcome-file-list>
31
32 </web-app>

4、测试客户端

1 package com.cnblogs.javalouvre.client;
2
3 import java.net.MalformedURLException;
4
5 import com.caucho.hessian.client.HessianProxyFactory;
6 import com.cnblogs.javalouvre.service.GreetService;
7
8 public class Client {
9
10 public static void main(String[] args) {
11 String url = "http://10.108.1.138:8080/Hessian/GreetService";
12
13 try {
14 GreetService service = (GreetService) (new HessianProxyFactory()).create(GreetService.class, url);
15 System.out.println(service.sayHello("Jobs"));
16 } catch (MalformedURLException e) {
17 e.printStackTrace();
18 }
19 }
20
21 }

三、Burlap开发步骤
1、编写服务接口(同Hessian示例的接口)
2、编写服务实现类,须继承自com.caucho.burlap.server.BurlapServlet

1 package com.cnblogs.javalouvre.service;
2
3 import com.caucho.burlap.server.BurlapServlet;
4
5 public class GreetServiceImpl extends BurlapServlet implements GreetService {
6
7 @Override
8 public String sayHello(String name) {
9 return "Hello " + name;
10 }
11
12 }

3、配置web.xml

1 <?xml version="1.0" encoding="UTF-8"?>
2 <web-app xmlns="http://java.sun.com/xml/ns/javaee"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
5 version="2.5">
6
7 <servlet>
8 <servlet-name>GreetService</servlet-name>
9 <servlet-class>com.cnblogs.javalouvre.service.GreetServiceImpl</servlet-class>
10 <load-on-startup>1</load-on-startup>
11 </servlet>
12
13 <servlet-mapping>
14 <servlet-name>GreetService</servlet-name>
15 <url-pattern>/GreetService</url-pattern>
16 </servlet-mapping>
17
18 <welcome-file-list>
19 <welcome-file>index.html</welcome-file>
20 <welcome-file>index.htm</welcome-file>
21 <welcome-file>index.jsp</welcome-file>
22 </welcome-file-list>
23
24 </web-app>

4、测试客户端

1 package com.cnblogs.javalouvre.client;
2
3 import java.net.MalformedURLException;
4
5 import com.caucho.burlap.client.BurlapProxyFactory;
6 import com.cnblogs.javalouvre.service.GreetService;
7
8 public class Client {
9
10 public static void main(String[] args) {
11 String url = "http://10.108.1.138:8080/Burlap/GreetService";
12
13 try {
14 GreetService service = (GreetService) (new BurlapProxyFactory()).create(GreetService.class, url);
15 System.out.println(service.sayHello("Jobs"));
16 } catch (MalformedURLException e) {
17 e.printStackTrace();
18 }
19 }
20
21 }
Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)
Dubbo是 [1] 阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [2] Spring框架无缝集成。
GRPC Java 1.4.0 发布,GRPC 的 Java 版
GRPC Java 1.4.0 已经发布,GRPC Java 是 GRPC 的 Java 版本。本次更新如下:
API Changes
LoadBalancers can now update addresses for a channel in-place, allowing the channel to re-use existing connections
The previously deprecated affinity API is now deleted. (#3026)
Bug fixes
Overly large messages now return RESOURCE_EXHAUSTED (#2906)
Netty-tcnative load failures may now be detected earlier and cause an exception during
build()
instead of creating a hung channel (#2599)OkHttp now ignores unknown SETTINGS (#3032). This resolves an important incompatibility with C-wrapped language instances of gRPC
Fixed dependency specification to avoid wildcards, which are not universally supported (#2961)
Channel.authority() should return the value of overrideAuthority (#2682)
Other
gRPC now does TXT record lookups for implementing service config. Android users will need to add proguard configs to ignore
javax.naming.**
classes (#2912)Protobuf bumped to 3.3.0
Disconnect messages have been silenced as non errors (#2960)
Netty has been upgraded to 4.1.11 and Netty TC Native 2.0.1
More work to support HTTP GET method. This work is considered experimental and known to have future incompatible wire changes
Fixed support for the AppEngine development sandbox
下载地址
Source code (zip)
Source code (tar.gz)
GRPC Java 1.5.0 发布,GRPC 的 Java 版
GRPC Java 1.5.0 已经发布,GRPC Java 是 GRPC 的 Java 版本。本次更新如下:
Major
Licence changes from BSD to Apache 2.0
Bazel is now supported
API Changes:
ServerInterceptor can be installed server-wide (#3118)
Minor
Calls that exceed their deadline include how long they waited in the Status
Updated to Netty TCNative. This should make it possible to use Apache Tomcat with gRPC
SSL configuration errors are reported sooner
Server side cancellations can take place even if the application is blocking the inbound thread (#2963)
Servers always return Status.UNKNOWN for internal errors. Added an optional interceptor to bring back the old behavior (#3064)
MethodDescriptor.create is now deprecated
Bug Fixes
Reduce logspam by using FINE instead of INFO for deadline narrowing events
Netty throughput speed increased 2x for very high throughput (#3038)
OverrideAuthorityNameResolverFactory now correctly forwards refresh() (#3062)
Grpc-Golang&Grpc-Java
这篇笔记主要是记录学习历程而不是怎么用~,以及protobuffers 和 gprc 各种文档的地址,等过上大半年后通过这篇笔记帮助自己快速重新掌握这个技术点
一、Protocolbuffers
关于protocolbuffers原来有写过一篇笔记质量还不错,本篇笔记就不重复写了:点击查看
下面记录下:protocbuffers在mac上安装时踩的坑
官网: https://developers.google.com/protocol-buffers
protoc下载地址:https://github.com/protocolbuffers/protobuf/releases
搞清楚自己在干什么~ 我们可以将protobuf理解成是一种协议。按照他的语法规范写好xxx.proto 文件后,使用protoc才能将其编译生成特定语言的代码~ 所以说这个protoc肯定免不了安装
下载之后为了方便使用,去 ~/.bash_profile 中添加PATH
vim ~/.bash_profile
#添加如下内容:
export PATH:/Users/dxm/protobuf/protoc-3.12.2-osx-x86_64/bin/protoc
# 使环境变量立即生效
source .bash_profile
# 校验是否识别protoc命令
which protoc
/Users/dxm/protobuf/protoc-3.12.2-osx-x86_64/bin/protoc
但是我发现将变量配置进~/.bash_profile 中总是会话级别的,换个窗口就不管用了。
所以推荐使用 ~/.zshrc 进行配置。如果没有的话,手动新建一个也无妨。
上面的protoc可以生成大部分语言的代码了,如果想要生成针对特定语言的代码,点击这个链接:https://github.com/protocolbuffers/protobuf/releases
二、Grpc
- 官网:https://www.grpc.io/
- grpc的简介:https://www.grpc.io/docs/what-is-grpc/introduction/
- grpc的核心概念:https://www.grpc.io/docs/what-is-grpc/core-concepts/
- quick-start:https://www.grpc.io/docs/languages/java/quickstart/
2.1 About-Java
-
github地址(从里面可以找到jar包和代码生成的插件):https://github.com/grpc/
- 通过命令:
mvn compile
进行编译 - 通过maven编译生成代码的前提:我们需要将编写的
xxx.proto
文件放置到/src/main/
目录下 - 编译处理来的产物位于:
target/generated-sources/
- 通过命令:
-
GrpcServer 和 GrpcStub之间可以用哪些方式交互数据?
- 交互对象信息
- stub发送obj,server返回stream
- stub发送stream,server返回obj
- stub和server之间通过stream交互
下面贴出关于Java使用Grpc的示例:
proto定义:https://github.com/zhuchangwu/oa-springboot/tree/master/src/protobuf
测试代码:https://github.com/zhuchangwu/oa-springboot/tree/master/src/test/java/com/changwu/flowCenterTest
2.2 About-Golang
首先是编写xxx.proto
文件
执行如下命令下载插件,它能将xxx.protof
编译成GO:
# protoc-gen-go 会被下载进/go/bin/
go get github.com/golang/protobuf/protoc-gen-go
快速开始:参照grpc官网(里面有demo,以及将xxx.proto编译成go代码的命令)https://www.grpc.io/docs/languages/go/quickstart/
使用golang完成client和server之间的四种通信模式:https://github.com/zhuchangwu/oa-golang-flow-center/commits/master
补充:
protoc --go_out=plugins=grpc:. --proto_path=/Users/dxm/go/src/ --proto_path=./ yyy.proto
--go_out: 指定了生成的go文件的目录
--proto_path: 指定了要去哪个目录中搜索import中导入的和要编译为.go的proto文件,可以定义多个,第一个指定了import "xxx.proto"中xxx.proto文件的搜索目录
第二个定义了要编译的文件yyy.proto文件的目录。
今天的关于java rpc和java rpc框架的分享已经结束,谢谢您的关注,如果想了解更多关于Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)、GRPC Java 1.4.0 发布,GRPC 的 Java 版、GRPC Java 1.5.0 发布,GRPC 的 Java 版、Grpc-Golang&Grpc-Java的相关知识,请在本站进行查询。
本文标签: