springboot整合rpc远程调用_SpringCloud—RPC远程调用
Eureka介绍
Spring Cloud Eureka 是对Netflix公司的Eureka的二次封装,它实现了服务治理的功能,Spring Cloud Eureka提供服务端与客户端,服务端即是Eureka服务注册中心,客户端完成微服务向Eureka服务的注册与发现。服务端和客户端均采用Java语言编写
Eureka高可用环境搭建(模拟)
Eureka Server 高可用环境需要部署两个Eureka server,它们互相向对方注册。如果在本机启动两个Eureka需要注意两个Eureka Server的端口要设置不一样,这里我们部署一个Eureka Server工程,将端口可配置,制作两个Eureka Server启动脚本,启动不同的端口。
1、在实际使用时Eureka Server至少部署两台服务器,实现高可用。
2、两台Eureka Server互相注册。
3、微服务需要连接两台Eureka Server注册,当其中一台Eureka死掉也不会影响服务的注册与发现。
4、微服务会定时向Eureka server发送心跳,报告自己的状态。
5、微服务从注册中心获取服务地址以RESTful方式发起远程调用。
工程搭建
pom.xml
org.springframework.cloud
spring-cloud-dependencies
Dalston.SR3
pom
import
org.springframework.cloud
spring‐cloud‐starter‐netflix‐eureka‐server
Application.ymlserver:
port: ${PORT:50101} #服务端口
spring:
application:
name: eureka-test #指定服务名(工程名)
eureka:
client:
registerWithEureka: true #服务注册,是否将自己注册到Eureka服务中(单机模式false)
fetchRegistry: true #服务发现,是否从Eureka中获取注册信息(单机模式false)
serviceUrl: #Eureka客户端与Eureka服务端的交互地址,高可用状态配置对方的地址,单机状态配置自己(如果不配置则默认本机8761端口)
defaultZone: ${EUREKA_SERVER:http://eureka02:50102/eureka/}
server:
enable-self-preservation: false #是否开启自我保护模式
eviction-interval-timer-in-ms: 60000 #服务注册表清理间隔(单位毫秒,默认是60*1000)
instance:
hostname: ${EUREKA_DOMAIN:eureka01}
Application启动类@EnableEurekaServer//标识这是一个Eureka服务
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
说明:
两个Eureka互相向对方注册,这里需要通过域名或主机名访问,先在本地host文件中配置eureka01和eureka02域名;
其中配置文件中${PPRT:50101}是为了配置动态端口,具体配置如下:
IDEA:Run->edit configurations
找到Application复制一份在VM options一栏添加:
-DPORT=50101 -DEUREKA_SERVER=http://eureka02:50102/eureka/ -DEUREKA_DOMAIN=eureka01
在复制一份在VM options一栏添加:
-DPORT=50102 -DEUREKA_SERVER=http://eureka01:50101/eureka/ -DEUREKA_DOMAIN=eureka02
这样就可以启动两台服务了,两台服务中心互相注册实现高可用。
配置客户服务
pom.xml
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
application.ymleureka:
client:
registerWithEureka: true #服务注册开关
fetchRegistry: true #服务发现开关
serviceUrl: #Eureka客户端与Eureka服务端进行交互的地址,多个中间用逗号分隔
defaultZone: ${EUREKA_SERVER:http://localhost:50101/eureka/,http://localhost:50102/eureka/}#写两个避免其中一台挂掉
instance:
prefer‐ip‐address: true #将自己的ip地址注册到Eureka服务中
ip‐address: ${IP_ADDRESS:127.0.0.1}
instance‐id: ${spring.application.name}:${server.port} #指定实例id
别忘了在启动类上添加注解 @EnableDiscoveryClient ,表示它是一个Eureka的客户端
Feign远程调用
先介绍一下Ribbon:
Ribbon是Netflix公司开源的一个负载均衡的项目(https://github.com/Netflix/ribbon),它是一个基于HTTP、TCP的客户端负载均衡器。
它和Nginx不同,Nginx是服务端代理转发,Ribbon是客户端调用。
原理:
1、在消费微服务中使用Ribbon实现负载均衡,Ribbon先从EurekaServer中获取服务列表。
2、Ribbon根据负载均衡的算法去调用微服务。
那么Feign又是什么?
Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入Feign并且集成了Ribbon实现客户端负载均衡调用。
Feign集成了Ribbon使用起来更加方便
具体使用:
在客户端添加依赖:
org.springframework.cloud
spring‐cloud‐starter‐openfeign
com.netflix.feign
feign‐okhttp
定义FeignClient接口:(client02_test服务工程略)@FeignClient(value = client02_test)//远程调用的服务名
public interface client {
@GetMapping("/user/get/{id}")//GetMapping标识远程调用的类型
public User findById(@PathVariable("id") String id);
}
}
启动类添加@EnableFeignClients注解
测试远程调用:@RunWith(SpringRunner.class)
@SpringBootTest
public class FeignTest {
@Autowired
CmsPageClient cmsPageClient;//接口代理对象,由Feign生成代理对象
@Test
public void testFeign() {
//通过服务id调用cms的查询页面接口
User user = client.findById("5a754adf6abb500ad05688d9");
System.out.println(user);
}
}
Feign注意点
SpringCloud对Feign进行了增强兼容了SpringMVC的注解 ,我们在使用SpringMVC的注解时需要注意:
1、feignClient接口 有参数在参数必须加@PathVariable("XXX")和@RequestParam("XXX")
2、feignClient返回值为复杂对象时其类型必须有无参构造函数。
springboot整合rpc远程调用_SpringCloud—RPC远程调用相关推荐
- SpringBoot整合Grpc实现跨语言RPC通讯
什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...
- SpringBoot整合RPC框架---Thrift
文章目录 什么是Thrift 架构 支持的通讯协议 支持的传输协议 支持的服务模型 Thrift的优点 SpringBoot整合Thrift 为什么会出现RPC框架 常见的RPC框架集成套路 开撸 官 ...
- springboot整合Thrift
什么是Thrift Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务.它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为"大规模跨语言服务开发 ...
- 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合
在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...
- java socket 远程调用_使用Socket反射Java流操作进行方法的远程调用(模拟RPC远程调用)...
写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...
- [架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构
目录 第1章 远程过程/函数调用RPC概述 1.1 什么是编程语言原生的函数调用 1.2 IPC:(Inter Process Communication )跨进程通信 1.4 什么是本地过程(函数) ...
- RPC远程调用(RMI的方式实现RPC、HttpClient实现RPC远程调用)
RPC是什么? 2.3RPC实现的技术: 3:RMI实现RPC远程调用: 3.1RMI介绍 3.2RMI实现vip访问orders 3.2.1开发服务生产者(provider) 3.2.1.1创建or ...
- 远程调用-Sun RPC
远程调用-Sun RPC 一.概述 二.函数clnt_create 三.RPC例子 四.多线程化 五.服务器捆绑 六.inetd和RPC服务器 七.认证 八.超时和重传 九.TCP连接管理 十.事务I ...
- spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security
spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...
最新文章
- XBOX ONE游戏开发之登陆服务器(一)
- saltstack执行state.sls耗时长的坑
- 道理都懂,为什么还是做不好需求分析?
- 赠你一只金色的眼 - 富集分析和表达数据可视化
- 【BZOJ2337】XOR和路径,概率期望DP+高斯消元
- 2天驾驭div+css_老婆竟然只知道几个css伪类,不行得惩罚她了
- 如何安装无签名认证的rpm包
- linux x中文显示,01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置...
- html让font居中,用CSS做将如何字体居中?
- 基于FPGA的关于flash一些学习记录
- 【科研小技巧|知网】如何下载 PDF 格式的学位论文
- cups支持的打印机列表_更完整的CUPS打印机状态原因列表
- 卡方检验c语言算法,R语言 | 卡方检验(Chi-squaretest)
- 常用收藏(自己用的)
- 并发编程——Forkjoin设计模式原理
- 记录--Spyder打开时出现“An error occurred while starting the kernel“
- TestBird《2021中国手游测试白皮书》---国内手游
- Pandas入门篇:Pandas基础
- python添加横线代码_Python中的五种下划线
- 昨天苹果发布了2022年平板IPAD10,果然一贯的刀法出众,我在网上找了一个苹果处理器历代的发布产品对比