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远程调用相关推荐

  1. SpringBoot整合Grpc实现跨语言RPC通讯

    什么是gRPC gRPC是谷歌开源的基于go语言的一个现代的开源高性能RPC框架,可以在任何环境中运行.它可以有效地连接数据中心内和跨数据中心的服务,并提供可插拔的支持,以实现负载平衡,跟踪,健康检查 ...

  2. SpringBoot整合RPC框架---Thrift

    文章目录 什么是Thrift 架构 支持的通讯协议 支持的传输协议 支持的服务模型 Thrift的优点 SpringBoot整合Thrift 为什么会出现RPC框架 常见的RPC框架集成套路 开撸 官 ...

  3. springboot整合Thrift

    什么是Thrift Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务.它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为"大规模跨语言服务开发 ...

  4. 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合

    在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...

  5. java socket 远程调用_使用Socket反射Java流操作进行方法的远程调用(模拟RPC远程调用)...

    写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...

  6. [架构之路-61]:目标系统 - 平台软件 - 基础中间件 - 远程过程(函数)调用RPC原理与其网络架构

    目录 第1章 远程过程/函数调用RPC概述 1.1 什么是编程语言原生的函数调用 1.2 IPC:(Inter Process Communication )跨进程通信 1.4 什么是本地过程(函数) ...

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

  8. 远程调用-Sun RPC

    远程调用-Sun RPC 一.概述 二.函数clnt_create 三.RPC例子 四.多线程化 五.服务器捆绑 六.inetd和RPC服务器 七.认证 八.超时和重传 九.TCP连接管理 十.事务I ...

  9. spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security

    spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...

最新文章

  1. XBOX ONE游戏开发之登陆服务器(一)
  2. saltstack执行state.sls耗时长的坑
  3. 道理都懂,为什么还是做不好需求分析?
  4. 赠你一只金色的眼 - 富集分析和表达数据可视化
  5. 【BZOJ2337】XOR和路径,概率期望DP+高斯消元
  6. 2天驾驭div+css_老婆竟然只知道几个css伪类,不行得惩罚她了
  7. 如何安装无签名认证的rpm包
  8. linux x中文显示,01_Linux系统系统语言查询,设置Xshell工具,中文显示,测试Xshell中文字符显示,Linux中文显示乱码设置...
  9. html让font居中,用CSS做将如何字体居中?
  10. 基于FPGA的关于flash一些学习记录
  11. 【科研小技巧|知网】如何下载 PDF 格式的学位论文
  12. cups支持的打印机列表_更完整的CUPS打印机状态原因列表
  13. 卡方检验c语言算法,R语言 | 卡方检验(Chi-squaretest)
  14. 常用收藏(自己用的)
  15. 并发编程——Forkjoin设计模式原理
  16. 记录--Spyder打开时出现“An error occurred while starting the kernel“
  17. TestBird《2021中国手游测试白皮书》---国内手游
  18. Pandas入门篇:Pandas基础
  19. python添加横线代码_Python中的五种下划线
  20. 昨天苹果发布了2022年平板IPAD10,果然一贯的刀法出众,我在网上找了一个苹果处理器历代的发布产品对比

热门文章

  1. 漫画:凌晨2点,老板在工作群@了我...
  2. 陆奇最新分享:数字化进程加速,创新者如何把握机会?
  3. Jeecg-Boot 2.1.4 版本发布,基于SpringBoot低代码平台
  4. Windows下用tree命令生成目录树
  5. 【JEECG技术博文】online自定义模板的使用
  6. Eclipse导出可执行JAR文件的方法
  7. SENET——imageNet冠军解读
  8. Lucy-Richardson加速算法以及PSF计算MATLAB代码
  9. RedisView-开源跨平台的Redis可视化工具
  10. Oracle数据库中的dual表