写在前面
源码在这里。本例在这篇博客基础上进行讲解。再贴下图,回顾下当前的架构:
当前有一个端口号为8671
的eureka的服务端实例,端口号为8672
,8673
的eureka客户端相同应用的两个实例,端口号为8674
的ribbon的eureka的客户端实例。这里我们再添加一个模块my-service-feign
基于feign的方式来调用myeureka-client
的服务。
1:创建my-service-feign
1.1:创建项目
new
->module
,选择Spring Inilializr
以及java8,然后next,录入gav等信息,创建完成后如下图:
1.2:设置parent
<parent>
<groupId>dongshi.daddy</groupId>
<artifactId>my-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
1.3:引入依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
1.4:完整pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>dongshi.daddy</groupId>
<artifactId>my-service-feign</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-service-feign</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>dongshi.daddy</groupId>
<artifactId>my-eureka</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
1.5:配置文件
server:
port: 8765
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
spring:
application:
name: dongshidaddy-first-feign-client
1.6:启用相关注解
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
这里的@EnableFeignClients
是启用feign客户端。
完整代码如下:
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
@EnableFeignClients
public class MyServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run(MyServiceFeignApplication.class, args);
}
}
1.7:配置基于feign的service
@FeignClient(value = "DONGSHIDADDY-FIRST-EUREKA-CLIENT")
public interface SchedualServiceHi {
@RequestMapping(value = "/hi",method = RequestMethod.GET)
String sayHiFromClientOne(@RequestParam(value = "name") String name);
}
其中@FeignClient(value = "DONGSHIDADDY-FIRST-EUREKA-CLIENT")
是指定调用服务名为DONGSHIDADDY-FIRST-EUREKA-CLIENT
提供的服务,这里注意改成自己的。方法sayHiFromClientOne
通过rest风格接口的方式配置了调用了接口的Mapping信息。
1.8:配置controller
@RestController
public class HiController {
@Autowired
SchedualServiceHi schedualServiceHi;
@GetMapping(value = "/hi")
public String sayHi(@RequestParam String name) {
return schedualServiceHi.sayHiFromClientOne( name );
}
}
2:测试
2.1:启动my-enreka-server
该服务是eureka的服务端,作为服务的注册中心使用,端口号是8761
。
2.2:启动myeureka-client
第1个实例
修改配置文件设置端口号为8762
,然后启动。
2.3:启动myeureka-client
第2个实例
修改端口号为8763
。注意不能直接启动,需要在Edit Configurations
下添加一个springboot的程序,然后设置名称和主函数,如下图:
启动成功后,查看http://localhost:8761/
可以看到myeureka-client
的实例注册了两个,端口号分别为8762
,8763
。
2.4:启动my-service-feign
启动后可以在eureka服务端看到注册的信息,如下图:
2.5:访问接口
如下重复访问,可以在myeureka-client
的两个实例中进行负载调用:
3:项目架构
此时系统中有1
个eureka的服务端,端口号为8761
,3
个eureka客户端,分别是myeureka-client
,my-service-ribbon
,my-service-feign
,其中myeureka-client启动2个实例
,端口号分别是8762
和8763
,my-service-ribbon和my-service-feign调用myeureka-client提供的服务。最终结构如下图:
其中的蓝色边框
框起来的就是本文添加的部分。