我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring原生Rpc的正确打开方式有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring原生Rpc的正确打开方式有哪些

本文小编为大家详细介绍“Spring原生Rpc的正确打开方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring原生Rpc的正确打开方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

什么是Rpc?

Rpc(Remote Procedure Call): 封装了内部实现的远程调用过程就是rpc,rpc主要为了简化远程服务调用,通俗的讲就是调用远程服务(跨主机,跨进程)就像调用本地方法一样。Spring Cloud体系中的Fegin 技术也可以认为是采用http协议传输数据的一种Rpc技术。

Spring中的Rpc

Spring中内置了六种不同数据传输方式的原生的Rpc实现,分别是WebService、Jms、Rmi、Http、Hessian(http)、Amqp。熟悉Rpc的知道,在Java中,主要是通过生成服务接口的代理来实现Rpc服务的调用,Dubbo、Motan这样,Spring的实现也是这样。在Rpc服务调用中,有两个角色,分别是服务的提供者和调用者(消费者)。一方面服务调用者通过代理,在服务调用时会传输服务定义的接口名+方法参数给到提供者。另一方面服务提供者拿到接口信息找到本地服务生成调用结果返回给调用者。所以下面所述六种Rpc实现都会有一个公共的服务接口定义,以及各自的代理实现配置。

定义服务接口

 @WebService public interface AccountService { Account getAccount(String name);          class Account implements Serializable { private String name; public String getName(){ return name;          } public void setName(String name) { this.name = name;          }     }}

公共的api,在Rpc的提供者和消费者中都会使用到,提供者中会实现这个接口提供服务,消费者会通过代理,生成这个接口的代理实现 ,然后通过底层封装发送具体的消息。和使用dubbo和motan类似

调用服务代码

@SpringBootApplication public class WsConsumerApplication { @Autowired private AccountService accountService; @PostConstruct public void callRpcService(){System.out.println("RPC远程访问开始!");System.err.println(accountService.getAccount("kl").getName());System.out.println("RPC远程访问结束!");} public static void main(String[] args) {SpringApplication.run(WsConsumerApplication.class, args);}}

每个Rpc实现都一样,都是通过注入AccountService 接口的代理实现来调用服务。不过每个Rpc的代理的配置方式会略有不同,主要体现在不同的传输技术会用到不同的配置。总的来说,连接url(http://127.0.0.1、tcp://172.0.0.1、rmi://127.0.0.1),端口、代理接口信息等都是共同需要的。

WEBSERVICE的RPC实现

服务提供者

服务实现
@WebService(serviceName="AccountService",endpointInterface = "com.spring.rpc.api.AccountService") @Service public class AccountServiceImpl extends SpringBeanAutowiringSupport implements AccountService { Logger logger = LoggerFactory.getLogger(getClass()); @Override @WebMethod public Account getAccount(String name) {        logger.info("{} 请求获取账号!", name);        Account account = new Account();        account.setName(name + "的账号"); return account;    }}

和其他服务实现不一样,WebService定义服务时,需要使用@WebService和@WebMethod注解标记

服务暴露
@Configuration public class WsConfig { private String ipList = "127.0.0.1"; private String userName = "admin"; private String passWord = "sasa"; @Bean public SimpleHttpServerJaxWsServiceExporter rmiServiceExporter(Authenticator authenticator) {        SimpleHttpServerJaxWsServiceExporter exporter = new SimpleHttpServerJaxWsServiceExporter();        exporter.setHostname("127.0.0.1");        exporter.setPort(8083);        exporter.setAuthenticator(authenticator); return exporter;    } @Bean public Authenticator authenticator(){        Authenticator authenticator = new Authenticator();        authenticator.setIpList(ipList);        authenticator.setUserName(userName);        authenticator.setPassWord(passWord); return authenticator;    }}

完成如上代码,其实我们已经构建了一个完整的WebService服务,而且还加上了用户、密码和ip白名单等接口权限认证,访问:http://127.0.0.1:8083/AccountServiceImpl?WSDL 就可以看到服务的定义,如下:

Spring原生Rpc的正确打开方式有哪些

服务消费者

@Configuration public class WsConfig { @Bean("accountService") public JaxWsPortProxyFactoryBean accountService()throws Exception{        JaxWsPortProxyFactoryBean factoryBean = new JaxWsPortProxyFactoryBean();        factoryBean.setServiceName("AccountService");        factoryBean.setPortName("AccountServiceImplPort");        factoryBean.setNamespaceUri("http://provider.ws.rpc.spring.com/");        URL wsdlDocumentUrl = new URL("http://127.0.0.1:8083/AccountServiceImpl?WSDL");        factoryBean.setWsdlDocumentUrl(wsdlDocumentUrl);        factoryBean.setServiceInterface(AccountService.class);        factoryBean.setUsername("admin");        factoryBean.setPassword("sasa"); return factoryBean;    }}

通过声明JaxWsPortProxyFactoryBean来获得AccountService.class的代理实例。当注入服务调用方法时,实际上是触发了一次WebService的远程调用

HTTP的RPC实现

服务提供者

服务实现
@Service public class AccountServiceImpl implements AccountService { Logger logger = LoggerFactory.getLogger(getClass()); @Override public Account getAccount(String name) {        logger.info("{} 请求获取账号!", name);        Account account = new Account();        account.setName(name + "的账号"); return account;    }}
服务暴露
@Configuration public class HttpConfig { @Bean("/AccountService") public HttpInvokerServiceExporter rmiServiceExporter(AccountServiceImpl accountService){        HttpInvokerServiceExporter exporter = new HttpInvokerServiceExporter();        exporter.setService(accountService);        exporter.setServiceInterface(AccountService.class); return exporter;    } @Bean public ServletRegistrationBean servletRegistrationBean(DispatcherServlet dispatcherServlet) {        ServletRegistrationBean servlet = new ServletRegistrationBean();        servlet.setServlet(dispatcherServlet);        servlet.setName("remoting");        servlet.setLoadOnStartup(1);        servlet.addUrlMappings("/remoting/*"); return servlet;    }}

服务消费者

@Configuration public class HttpConfig { @Bean("accountService") public HttpInvokerProxyFactoryBean accountService(){        HttpInvokerProxyFactoryBean factoryBean = new HttpInvokerProxyFactoryBean();        factoryBean.setHttpInvokerRequestExecutor(new HttpComponentsHttpInvokerRequestExecutor());        factoryBean.setServiceUrl("http://127.0.0.1:8081/remoting/AccountService");        factoryBean.setServiceInterface(AccountService.class); return factoryBean;    }}

可以看到,在配置Http实现的Rpc服务消费者时,和WebService是类似的,定义一个FactoryBean就ok了。其实其他的四种Rpc实现也都大同小异。后面就不一一列举了

读到这里,这篇“Spring原生Rpc的正确打开方式有哪些”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring原生Rpc的正确打开方式有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring原生Rpc的正确打开方式有哪些

本文小编为大家详细介绍“Spring原生Rpc的正确打开方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring原生Rpc的正确打开方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。什么是Rp
2023-06-29

winform窗口的打开方式有哪些

Winform窗口的打开方式有以下几种:1. 使用Show方法:使用窗口的Show方法可以在不阻塞当前窗口的情况下打开一个新窗口。新窗口可以与当前窗口同时存在,用户可以自由切换。2. 使用ShowDialog方法:使用窗口的ShowDial
2023-10-11

Android打开蓝牙的方式有哪些

Android打开蓝牙的方式有以下几种:1. 使用系统设置界面:在Android设备的设置界面中,找到蓝牙选项,点击开启蓝牙。2. 使用代码调用系统API:通过编写代码调用Android系统的蓝牙API来开启蓝牙。可以使用Bluetooth
2023-09-25

正确处理网站建设产生的死链的方法有哪些

本篇内容介绍了“正确处理网站建设产生的死链的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在网站优化工作中,难免会产生死链,那么什
2023-06-10

python中有哪些打开文件的方式

今天就跟大家聊聊有关python中有哪些打开文件的方式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、函数说明open 函数默认以只读方式打开文件,并且返回文件对象2、语法f =
2023-06-15

win10控制面板打开的方式有哪些

打开Win10控制面板的方式有以下几种:使用快捷键Win + X,然后选择"控制面板"。在任务栏搜索框中输入"控制面板",然后点击搜索结果中的"控制面板"。在开始菜单中,点击"Windows 系统"文件夹,然后点击"控制面板"。使用运
win10控制面板打开的方式有哪些
2024-02-29

SpringBoot原生组件注入实现的方式有哪些

这篇文章主要介绍了SpringBoot原生组件注入实现的方式有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot原生组件注入实现的方式有哪些文章都会有所收获,下面我们一起来看看吧。原生组件注
2023-07-04

win10设置打不开的原因及解决方法有哪些

Win10设置无法打开的原因及解决方法主要有以下几种:1. 系统故障或错误:可能是由于系统文件损坏或错误导致的。可以通过运行系统修复工具如SFC扫描器来修复系统文件。2. 冲突的第三方软件:某些第三方软件可能与Win10设置冲突,导致无法打
2023-08-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录