使用Idea創(chuàng)建一個Eurke項目,包括一個Eureka服務(wù)端和兩個客戶端
一、創(chuàng)建Eureka服務(wù)
- 使用idea創(chuàng)建一個新項目心赶,這里面可以選擇自己的jdk版本
- 選擇
cloud Discovery
--->Eureka Server
創(chuàng)建項目
- 在
Application
上面申明這是一個Eureka服務(wù)
@EnableEurekaServer
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
- 設(shè)置
Erueka
服務(wù)的配置文件器罐,這兒我使用的是yml文件
# 服務(wù)注冊中心 (單節(jié)點)
server:
port: 9874
eureka:
instance:
hostname: localhost
client:
fetch-registry: false # 表示是否從Eureka Server獲取注冊信息,默認(rèn)為true.因為這是一個單點的Eureka Server,不需要同步其他的Eureka Server節(jié)點的數(shù)據(jù),這里設(shè)置為false
register-with-eureka: false # 表示是否將自己注冊到Eureka Server,默認(rèn)為true.由于當(dāng)前應(yīng)用就是Eureka Server,故而設(shè)置為false.
service-url:
# 設(shè)置與Eureka Server的地址,查詢服務(wù)和注冊服務(wù)都需要依賴這個地址.默認(rèn)是http://localhost:9874/eureka/;多個地址可使用','風(fēng)格.
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 這時候就可以啟動項目,訪問
localhost:9874
地址楷怒,確定是否配置成功,如圖,表示設(shè)置成功
二颓遏、配置客戶端
- 同上1、2的步驟創(chuàng)建
eureka
的客戶端項目 - 在
Application
中聲明這是一個Eureka客戶端
(@EnableDiscoveryClient注解能激活Eureka中的DiscoveryClient實現(xiàn))
@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class SpringCloudEurekaClientApplication {
@GetMapping("/client1")
public String print() {
return "這是 client1";
}
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
- 配置客戶端的服務(wù)中心
server:
port: 9875
spring:
application:
name: service
eureka:
client:
service-url:
defaultZone: http://localhost:9874/eureka # 指定服務(wù)注冊中心
- 校驗客戶端是否配置成功滞时,如圖叁幢,表示配置成功
此時也可以通過客戶端自己的服務(wù)訪問接口
三、通過Feign
進行遠程進程調(diào)用
- 同上創(chuàng)建
client2
項目坪稽,配置文件如下
server:
port: 9876
spring:
application:
name: service2
eureka:
client:
service-url:
defaultZone: http://localhost:9874/eureka # 指定服務(wù)注冊中心
- 在
client2
中聲明兩個接口曼玩,用來提供遠程調(diào)用
@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
依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.1.RELEASE</version>
</dependency>
- 為
client1
啟動feign
配置
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients//啟動Feign客戶端注解
public class SpringCloudEurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudEurekaClientApplication.class, args);
}
}
- 為
client1
聲明要調(diào)用的遠程接口
@FeignClient("service2")
public interface TestClient1 {
//無參數(shù)調(diào)用
@GetMapping(value = "/client2")
public String print111();
//有參數(shù)調(diào)用
@GetMapping(value = "/client2-params" )
public String printParams(@RequestParam(value = "s")String s);
}
注意:
a. 這里面的@FeignClient("service2")
表示需要調(diào)用的遠程服務(wù)的名字,service2
就是在client2
的yml文件中聲明的spring.application.name
b. 有參數(shù)的的接口聲明一定要加上 @RequestParam(value = "s")
注解
- 在
client1
中聲明接口進行遠程調(diào)用
@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);
}
}
- 測試接口