SpringCloud—— eureka+feign 实现声明式服务治理
<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)支持异步和反应模型、缓存和批处理。
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 配置:
评论