使用Idea创建一个Eurke项目,包括一个Eureka服务端和两个客户端
一、创建Eureka服务
- 使用idea创建一个新项目,这里面可以选择自己的jdk版本
- 选择
cloud Discovery
--->Eureka Server
创建项目
- 在
Application
上面申明这是一个Eureka服务
@EnableEurekaServer
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 设置
Erueka
服务的配置文件,这儿我使用的是yml文件
# 服务注册中心 (单节点)
server:
port: 9874
eureka:
instance:
hostname: localhost
client:
fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为false
register-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.
service-url:
# 设置与Eureka Server的地址,查询服务和注册服务都需要依赖这个地址.默认是http://localhost:9874/eureka/;多个地址可使用','风格.
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 这时候就可以启动项目,访问
localhost:9874
地址,确定是否配置成功,如图,表示设置成功
二、配置客户端
- 同上1、2的步骤创建
eureka
的客户端项目 - 在
Application
中声明这是一个Eureka客户端
(@EnableDiscoveryClient注解能激活Eureka中的DiscoveryClient实现)
@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class SpringCloudEurekaClientApplication {
@GetMapping("/client1")
public String print() {
return "这是 client1";
}
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
- 配置客户端的服务中心
server:
port: 9875
spring:
application:
name: service
eureka:
client:
service-url:
defaultZone: http://localhost:9874/eureka # 指定服务注册中心
- 校验客户端是否配置成功,如图,表示配置成功
此时也可以通过客户端自己的服务访问接口
三、通过Feign
进行远程进程调用
- 同上创建
client2
项目,配置文件如下
server:
port: 9876
spring:
application:
name: service2
eureka:
client:
service-url:
defaultZone: http://localhost:9874/eureka # 指定服务注册中心
- 在
client2
中声明两个接口,用来提供远程调用
@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class SpringCloudEurekaClient2Application {
@GetMapping("/client2")
public String print() {
return "这是 client2222";
}
@GetMapping("/client2-params")
public String printParams(String s) {
return "这是 client2222 " + s ;
}
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClient2Application.class, args);
}
}
- 为
client1
加入feign
依赖
org.springframework.cloud
spring-cloud-starter-openfeign
2.0.1.RELEASE
- 为
client1
启动feign
配置
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients//启动Feign客户端注解
public class SpringCloudEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
- 为
client1
声明要调用的远程接口
@FeignClient("service2")
public interface TestClient1 {
//无参数调用
@GetMapping(value = "/client2")
public String print111();
//有参数调用
@GetMapping(value = "/client2-params" )
public String printParams(@RequestParam(value = "s")String s);
}
注意:
a. 这里面的@FeignClient("service2")
表示需要调用的远程服务的名字,service2
就是在client2
的yml文件中声明的spring.application.name
b. 有参数的的接口声明一定要加上 @RequestParam(value = "s")
注解
- 在
client1
中声明接口进行远程调用
@EnableDiscoveryClient
@SpringBootApplication
@RestController
@EnableFeignClients//启动Feign客户端注解
public class SpringCloudEurekaClientApplication {
@GetMapping("/client1")
public String print() {
return "这是 client1";
}
@Resource
TestClient1 testClient1;
@GetMapping("/client1-call-client2")
public String printClient2String() {
return testClient1.print111();
}
@GetMapping("/client1-call-client2-params")
public String printClient2String(String s) {
return testClient1.printParams(s);
}
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
- 测试接口