概要:
服務注冊中心有很多如:eureka,zookeeper,consul,nacos等,
本篇主要講eureka在代碼中的基本使用及相關知識總結,
案例:實作博客管理服務(消費者)blog-server 呼叫用戶資訊服務(生產者)
專案搭建總體思路
由于專案較多,所以我在搭建的時候使用maven聚合工程,父工程(springcloud01),注冊中心2個實作高可用(springcloud-eureka,springcloud-eureka02),用戶資訊服務(user-server),博客管理服務(blog-server),
流程圖:

手把手搭建代碼
maven聚合工程搭建:
父工程maven依賴:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.10.RELEASE</version>
</parent>
<!-- 管理依賴 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.M7</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--SpringCloud eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
1. 搭建微服務注冊中心01(10086)
maven依賴:
<!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
yml配置:
###服務埠號
server:
port: 10086
###eureka 基本資訊配置
eureka:
instance:
###注冊到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:10087/eureka/
###因為自己是為注冊中心,不需要自己注冊自己(集群時改為true)
register-with-eureka: true
###因為自己是為注冊中心,不需要檢索服務(集群時改為true)
fetch-registry: true
spring:
application:
name: eureka-server
啟動類:
@SpringBootApplication
@EnableEurekaServer
public class AppEureka {
public static void main(String[] args) {
SpringApplication.run(AppEureka.class, args);
}
}
啟動專案,訪問localhost:10086

搭建微服務注冊中心02(10087)
與注冊中心01搭建流程一致,區別在于yml配置:
###服務埠號
server:
port: 10087
###eureka 基本資訊配置
eureka:
instance:
###注冊到eurekaip地址
hostname: 127.0.0.1
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:10086/eureka/
###因為自己是為注冊中心,不需要自己注冊自己
register-with-eureka: true
###因為自己是為注冊中心,不需要檢索服務
fetch-registry: true
spring:
application:
name: eureka-server
注意:10086與10087的服務名稱(serverid)必須保持一致
將10086專案停了之后訪問10087

這樣就完成了注冊中心的高可用,由于一旦注冊中心掛了之后,所有的微服務全部癱瘓,所以一般注冊中心需要搭建集群,
2. 搭建生產者用戶資訊服務user-server
maven依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
yml配置
###服務啟動埠號
server:
port: 10081
###服務名稱(服務注冊到eureka名稱)
spring:
application:
name: user-server
###服務注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
###因為該應用為注冊中心,不會注冊自己
register-with-eureka: true
###是否需要從eureka上獲取注冊資訊
fetch-registry: true
啟動類:
@SpringBootApplication
@EnableEurekaClient
public class AppUserServer {
public static void main(String[] args) {
SpringApplication.run(AppUserServer.class, args);
}
}
controller層
@RestController
@RequestMapping("user")
public class UserController {
@Value("${server.port}")
private String serverPort;
@RequestMapping("/getUser")
public String getMember() {
return "this is getUser" + serverPort;
}
}
啟動專案后修改埠再次啟動(生產者服務啟動2次,為后續客戶端負載均衡準備)
訪問eureka管理頁面:localhost:10086

從圖中可看到user-server服務啟動了2個,分別為10081和10086兩個埠,
3. 搭建消費者服務博客管理blog-server
maven依賴:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 注意: 這里必須要添加, 否者各種依賴有問題 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
yml配置
###服務啟動埠號
server:
port: 10082
###服務名稱(服務注冊到eureka名稱)
spring:
application:
name: blog-server
###服務注冊到eureka地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
###因為該應用為注冊中心,不會注冊自己
register-with-eureka: true
###是否需要從eureka上獲取注冊資訊
fetch-registry: true
啟動類:
@SpringBootApplication
@EnableEurekaClient
public class AppBlogServer {
public static void main(String[] args) {
SpringApplication.run(AppBlogServer.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
@LoadBalanced就能讓這個RestTemplate在請求時擁有客戶端負載均衡的能力
controller層:
@RestController
@RequestMapping("blog")
public class BlogController {
@Autowired
private RestTemplate restTemplate;
@Value("${server.port}")
private String serverPort;
@RequestMapping("delBlog")
public String delBlog() {
// blog 使用rpc 遠程呼叫技術 呼叫 用戶服務
String userUrl = "http://user-server/user/getUser";
String result = restTemplate.getForObject(userUrl, String.class);
System.out.println("博客管理服務呼叫用戶資訊服務,result:" + result);
return result;
}
}
啟動專案,訪問localhost:10082/blog/delBlog

再次重繪:

從上面2次訪問可以發現,2次遠程呼叫的服務埠不一樣,說明了客戶端的負載均衡生效,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/265898.html
標籤:java
上一篇:Python:Drango框架介紹與后臺管理(圖書管理的專案實作)
下一篇:if...else優化篇(一)
