為什麼要搭建註冊中心集群 以防出現單點故障 也就是唯一那個註冊中心出現故障 導致整個架構故障 互相註冊 相互守望 先要修改本機的hosts文件的主機映射 增加映射 C:\Windows\System32\drivers\etc\hosts 1.修改之前7001配置文件 2.修改之後 需要修改host ...
為什麼要搭建註冊中心集群 以防出現單點故障 也就是唯一那個註冊中心出現故障 導致整個架構故障
互相註冊 相互守望
先要修改本機的hosts文件的主機映射 增加映射 C:\Windows\System32\drivers\etc\hosts
1.修改之前7001配置文件
server:
port: 7001
eureka:
instance:
hostname: localhost #服務端的實例名稱
client:
#false表示不向伺服器註冊自己
register-with-eureka: false
#false表示自己就是註冊中心 去維護服務實例 不需要去檢索服務
fetch-register: false
#設置與Enreka server交互的地址查詢服務和註冊服務都需要這個地址
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2.修改之後 需要修改hostname 這個就是剛剛修改的本機的hosts主機映射 還需要修改服務地址
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #服務端的實例名稱 主機別名 修改
client:
#false表示不向伺服器註冊自己
register-with-eureka: false
#false表示自己就是註冊中心 去維護服務實例 不需要去檢索服務
fetch-register: false
#設置與Enreka server交互的地址 查詢服務和註冊服務都需要這個地址 修改
service-url:
defaultZone: http://eureka7002.com:7002/eureka/
3.創建另一個註冊中心7002 導入依賴不贅述了 7002的application.yml配置
server:
port: 7002
eureka:
instance:
hostname: eureka7002.com #服務端的實例名稱 主機別名
client:
#false表示不向伺服器註冊自己
register-with-eureka: false
#false表示自己就是註冊中心 去維護服務實例 不需要去檢索服務
fetch-register: false
#設置與Enreka server交互的地址查詢服務和註冊服務都需要這個地址
service-url:
defaultZone: http://eureka7001.com:7001/eureka/
4.啟動7001 7002 配置成功
5.修改微服務提供者的配置client 其實只是增加了一個服務請求地址 defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka 集群版
8888消費者模塊
server:
port: 8888
spring:
application:
name: cloud-order-service
eureka:
client:
register-with-eureka: true #自己註冊到eureka 預設true
#是否從eureka抓取已有的註冊信息 預設為true 單節點無所謂 集群必須為true 才能配合ribbon使用負載均衡
fetch-registry: true
service-url:
#defaultZone: http://localhost:7001/eureka #註冊中心地址
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
支付模塊8001
server:
port: 8001
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username: root
password: 1234
mybatis:
mapper-locations: classpath:mapper/*.xml #配置文件
type-aliases-package: com.lyx.cloud.entities #所有entity別名所在包
eureka:
client:
register-with-eureka: true #自己註冊到eureka 預設true
#是否從eureka抓取已有的註冊信息 預設為true 單節點無所謂 集群必須為true 才能配合ribbon使用負載均衡
fetch-registry: true
service-url:
# defaultZone: http://localhost:7001/eureka #註冊中心地址 單機版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
5.啟動8888-消費者模塊 8001-支付模塊服務提供 成功註冊
6.微服務提供者 集群搭建 再創建一個支付模塊8002
server:
port: 8002
spring:
application:
name: cloud-payment-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/db2019?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
username: root
password: 1234
mybatis:
mapper-locations: classpath:mapper/*.xml #配置文件
type-aliases-package: com.lyx.cloud.entities #所有entity別名所在包
eureka:
client:
register-with-eureka: true #自己註冊到eureka 預設true
#是否從eureka抓取已有的註冊信息 預設為true 單節點無所謂 集群必須為true 才能配合ribbon使用負載均衡
fetch-registry: true
service-url:
# defaultZone: http://localhost:7001/eureka #註冊中心地址 單機版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
7.運行所有模塊 註冊成功
8.修改單機版的8888消費者的controller 讓它不指定從服務埠
controller
@RestController
@Slf4j
public class OrderController {
@Autowired
private RestTemplate restTemplate;
//private static final String BASE_URL="http://localhost:8001"; 修改前的埠
private static final String BASE_URL="http://CLOUD-PAYMENT-SERVICE"; 修改後 變成在eureka註冊的服務實例名稱
@PostMapping("/comsumer/payment/create")
public CommonResult<PayMent> create(@RequestBody PayMent payMent){
return restTemplate.postForObject(BASE_URL+"/payment/create",payMent,CommonResult.class);
}
@GetMapping("/comsumer/payment/get/{id}")
public CommonResult<PayMent> getPaymentByid(@PathVariable("id") Long id){
return restTemplate.getForObject(BASE_URL+"/payment/get/"+id,CommonResult.class);
}
}
9.修改RestTemplate 配置 需要給它添加一個註解@LoadBalanced 賦予RestTemplate負載均衡能力 預設是輪詢
是因為註冊中心暴露了多個支付模塊的服務名稱CLOUD-PAYMENT-SERVICE 但是消費者模塊不知道選哪個
@Configuration
public class ApplicationContextConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
10.測試 所以消費者模塊只關註微服務名稱