前言 |
爲什麼要搭建集羣呢?爲了避免 Eureka Server的失效,Eureka Server 高可用環境需要部署兩個及以上Eureka Server,它們互相向對方註冊。我這有兩個Eureka Server服務註冊中心,端口分別是6001 和 6002,下面主要說一下是如何搭建的
搭建步驟 |
下面說一下兩個Eureka Server的配置,它兩的配置基本上是一樣的,不一樣的地方我會着重說明一下,如果對單機版的Eureka Server 不瞭解的同學可以看下我上篇博客. 傳送門:搭建 Eureka Server 服務註冊中心
- 配置啓動類
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer_6001 {
public static void main(String[] args) {
SpringApplication.run(EurekaServer_6001.class, args);
}
}
- 配置application.yml文件(這個地方少有不同)
端口號6001:
server:
port: 6001
eureka:
server:
enable-self-preservation: false # 禁用自我保護模式
instance:
hostname: eureka6001.com # eureka 服務端的實例名稱
client:
registerWithEureka: false # 服務註冊,false表示不將集資註冊到Eureka服務中心
fetchRegistry: false # 服務發現 false表示自己不從Eureka服務中獲取註冊信息
serviceUrl: # Eureka客戶端與Eureka服務端的交互地址, 集羣版配置對方的地址 單機版配置自己(如果不配置默認端口是8761)
defaultZone: http://localhost:6002
端口號6002:
server:
port: 6002
eureka:
server:
enable-self-preservation: false # 禁用自我保護模式
instance:
hostname: eureka6002.com # eureka 服務端的實例名稱
client:
registerWithEureka: false # 服務註冊,false表示不將集資註冊到Eureka服務中心
fetchRegistry: false # 服務發現 false表示自己不從Eureka服務中獲取註冊信息
serviceUrl: # Eureka客戶端與Eureka服務端的交互地址, 集羣版配置對方的地址 單機版配置自己(如果不配置默認端口是8761)
defaultZone: http://localhost:6001
- 然後我們分別啓動6001和6002,可見如下圖:
我們可以幾點紅框裏的localhost回跳到另一個Eureka Server裏,這是我們的進羣就搭建好了
4. 現在啓動兩個微服務註冊到剛剛搭建的Eureka集羣上,兩個微服務連接了兩個不同的數據庫,下面的主要是兩個服務提供者的配置,其他代碼就不一一列出來了.
spring:
application:
name: microservice-product # 服務與服務之間的調用一般都是根據這個name
eureka:
client:
registerWithEureka: true # 服務註冊開關
fetchRegistry: true # 服務發現開關
serviceUrl: # 註冊到哪一個Eureka Server服務註冊中心,多箇中間用逗號分隔
#defaultZone: http://localhost:6001/eureka
defaultZone: http://localhost:6001/eureka,http://localhost:6002/eureka
instance:
instanceId: ${spring.application.name}:${server.port}
prefer-ip-address: true # 開啓顯示IP地址
- 搭建消費者
創建ConfigBean配置類
@Configuration
public class ConfigBean {
@LoadBalanced //開啓負載均衡
@Bean
public RestTemplate getRestTemplate() {
return new RestTemplate();
}
}
創建消費者接口
@RestController
public class ProductController_Consumer {
//這是服務提高着的url前綴
private static final String REST_URL_PREFIX = "http://microservice-product";
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value = "/consumer/product/list")
public List<Product> list() {
return restTemplate.getForObject(REST_URL_PREFIX + "/product/list", List.class);
}
}
創建消費者application.yml
eureka:
client:
registerWithEureka: false # 服務註冊,false表示不將本消費者註冊到 Eureka 服務器
fetchRegistry: true # 服務發現,true從 Eureka 服務器中獲取註冊信息
serviceUrl:
defaultZone: http://localhost:6001/eureka,http://localhost:6002/eureka
配置啓動類
@EnableEurekaClient
@SpringBootApplication
public class ProductConsumer_80 {
public static void main(String[] args){
SpringApplication.run(ProductConsumer_80.class,args);
}
}
- 開始測試,訪問 http://localhost:81/consumer/product/list
再次訪問
可見兩次訪問的結果並不相同,此致搭建負載均衡的Eureka Server集羣就算完畢了,負載均衡也有很多規則,我們這裏默認的輪詢!