启动Consul
可以使用本地的方式或者Docker的方式启动
本地启动
consul agent -dev
Server
引入依赖
pom文件内容如下
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</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>
配置文件
server.port=8081
spring.application.name=app-server
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
spring.cloud.consul.discovery.service-name=feign-server
启动类添加注解
@EnableDiscoveryClient //开启服务发现
@SpringBootApplication
public class FeignServerApplication {
public static void main(String[] args) {
SpringApplication.run(FeignServerApplication.class, args);
}
}
添加Controller
添加一个简单的接口
@RestController
@RequestMapping("server")
public class ServerController {
@GetMapping("/info/{str}")
public String getInfo(@PathVariable String str) {
if (str.equals("name")) {
return "feign-server";
} else {
return "other";
}
}
}
然后就可以启动server了
启动Client
引入依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>2021.0.4</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</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>
配置文件
server.port=8080
spring.application.name=app-client
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
# client不需要进行服务注解
spring.cloud.consul.discovery.register=false
开启 Feign 注解
在application启动类上添加@EnableFeignClients注解,让spring在启动的时候扫描所有的Feign Client 类。
@EnableFeignClients
@SpringBootApplication
public class FeignClientApplication {
public static void main(String[] args) {
SpringApplication.run(FeignClientApplication.class, args);
}
}
声明Feign Client
主要做两件事
- 在接口上声明
@FeignClient注解,备注目标服务Name - 定义目标服务的接口路径,以及方法的参数
@FeignClient(name = "feign-server")
public interface MyFeignClient {
@GetMapping("/server/info/{str}")
String getInfo(@PathVariable String str);
}
声明访问
我们在Controller中直接调用Feign访问Server
@RestController
@RequestMapping("/client")
public class MyController {
private final MyFeignClient feignClient;
public MyController(MyFeignClient feignClient) {
this.feignClient = feignClient;
}
@GetMapping("/serverInfo")
public String getServerInfo() {
return feignClient.getInfo("name");
}
}
接下来启动client , 访问该接口,可以看到返回了"feign-server",对应的刚刚在server controller中声明的值。