写点什么

SpringCloud—— eureka+feign 实现声明式服务治理

作者:Java高工P7
  • 2021 年 11 月 11 日
  • 本文字数:3222 字

    阅读完需:约 11 分钟

<packaging>jar</packaging>


<name>sikl-road-eureka</name>


<description>Demo project for Spring Boot</description>


<parent>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-parent</artifactId>


<version>1.5.9.RELEASE</version>


</parent>


<properties>


<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>


<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>


<java.version>1.8</java.version>


<spring-cloud.version>Edgware.RELEASE</spring-cloud.version>


</properties>


<dependencies>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-eureka-server</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-test</artifactId>


<scope>test</scope>


</dependency>


</dependencies>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-dependencies</artifactId>


<version>${spring-cloud.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


</dependencies>


</dependencyManagement>


<build>


<plugins>


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


</plugin>


</plugins>


</build>


</project>


2、启动类加注解:@EnableEurekaServer


@EnableEurekaServer


@SpringBootApplication


public class EurekaDomeServiceApplication {


public static void main(String[] args) {


SpringApplication.run(EurekaDomeServiceApplication.class, args);


}


}


3、application.yml 配置:


spring:


application:


name: eureka-service


server:


port: 1111 # 注册服务的端口号


eureka:


instance:


hostname: localhost # 指定主机名 (域名) 值=spring。profiles


server:


enable-self-preservation: false #关闭保护机制 可以将不可用的服务剔除


client:


register-with-eureka: false #不向注册中心注册资金


fetch-registry: false #关闭服务检索


serviceUrl:


defaultZone: http://{server.port}/eureka/ # 将自己注册到 peer2 这个 Eureka 上面去


启动 app 访问?http://localhost:1111/ ?能显示下图服务就搭建成功了:



-------------------------------------------------------------------------------------------------------------------------------

二、provider-service 搭建

1、pom.xml 配置:


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-eureka</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-test</artifactId>


<scope>test</scope>


</dependency>


</dependencies>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-dependencies</artifactId>


<version>${spring-cloud.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


</dependencies>


</dependencyManagement>


<build>


<plugins>


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


</plugin>


</plugins>


</build>


</project>


pom 文件中只需要引入 spring-cloud-starter-eureka 依赖就可以了


2、启动类加?@EnableEurekaClient 或者?@EnableDiscoveryClient


@EnableDiscoveryClient


@SpringBootApplication


public class EurekaDomeServiceApplication {


public static void main(String[] args) {


SpringApplication.run(EurekaDomeServiceApplication.class, args);


}


}


也可以使用 @EnableEurekaClient 代替 @EnableDiscoveryClient 注解


3、application.yml 配置:


spring:


application:


name: test-service #服务名称


server:


port: 8083


eureka:


client:


serviceUrl:


defaultZone: http://localhost:1111/eureka #注册中心


4、具体服务的代码和普通的 controller 相同:


@RestController


public class HelloController {


@RequestMapping("/hello")


public String index() {


return "hello word!";


}


}


5、运行 app 访问 http://localhost:1111/,能看到如下内容就算成功了:



---------------------------------------------------------------------------------------------------------------------------------


三、consumer-service 配置




方法一:


使用 RestTemplate 和 Ribbon 相结合的方式,这里简单介绍一下 Ribbon:


Ribbon 是 Netflix 公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上。它是一个经过了云端测试的 IPC 库,可以很好地控制 HTTP 和 TCP 客户端的一些行为。 Feign 已经默认使用了 Ribbon。


Ribbon 能做负载均衡、容错、多协议(HTTP, TCP, UDP)支持异步和反应模型、缓存和批处理。


【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


1、pom.xml 配置:


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-eureka</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-starter-ribbon</artifactId>


</dependency>


<dependency>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-starter-test</artifactId>


<scope>test</scope>


</dependency>


</dependencies>


<dependencyManagement>


<dependencies>


<dependency>


<groupId>org.springframework.cloud</groupId>


<artifactId>spring-cloud-dependencies</artifactId>


<version>${spring-cloud.version}</version>


<type>pom</type>


<scope>import</scope>


</dependency>


</dependencies>


</dependencyManagement>


<build>


<plugins>


<plugin>


<groupId>org.springframework.boot</groupId>


<artifactId>spring-boot-maven-plugin</artifactId>


</plugin>


</plugins>


</build>


</project>


只需在 pom 中添加?spring-cloud-starter-eureka 和 spring-cloud-starter-ribbon 依赖


2、启动类添加:?@EnableEurekaClient 和 负载均衡配置:


@EnableEurekaClient @SpringBootApplication public class EurekaDomeCleanApplication { //开启客户端负载均衡 @Bean @LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(EurekaDomeCleanApplication.class, args); }


//开启客户端负载均衡


@Bean


@LoadBalanced


public RestTemplate restTemplate() {


return new RestTemplate();


}


public static void main(String[] args) {


SpringApplication.run(EurekaDomeCleanApplication.class, args);


}


3、application.ym 配置 eureka 服务地址:


server:


port: 7777


eureka:


client:


register-with-eureka: false


serviceUrl:


defaultZone: http://localhost:1111/eureka


4、调用服务:


public String test() {


return service.getForObject("http://test-service:8080/hello", String.class);


}


注意 test-service 是你的服务名,不能是 IP 地址


方式二: 声明式服务调用: 使用 eureka+feign 框架




这里简单的介绍一下什么是 feign,Spring Cloud Feign 是基于 Netflix Feign 实现的,整理 Spring Cloud Ribbon 与 Spring Cloud Hystrix,并且实现了声明式的 Web 服务客户端定义方式。


在 spring cloud feign 的实现下,我们只需创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定,简化了在使用 spring cloud ribbon 时自行封装的开发量。简单的说方式二封装了方式一使开发变得更简单。


1、pom.xml 配置:

用户头像

Java高工P7

关注

还未添加个人签名 2021.11.08 加入

还未添加个人简介

评论

发布
暂无评论
SpringCloud—— eureka+feign实现声明式服务治理