GVKun编程网logo

java rpc(java rpc框架)

11

本文将介绍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框架)

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(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)

Dubbo是 [1]  阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 [2]  Spring框架无缝集成。

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力: 面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
 
RPC:RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

GRPC Java 1.4.0 发布,GRPC 的 Java 版

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 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

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 rpcjava rpc框架的分享已经结束,谢谢您的关注,如果想了解更多关于Dubbo(高性能、轻量级的开源Java RPC框架) & RPC(远程过程调用)、GRPC Java 1.4.0 发布,GRPC 的 Java 版、GRPC Java 1.5.0 发布,GRPC 的 Java 版、Grpc-Golang&Grpc-Java的相关知识,请在本站进行查询。

本文标签: