SpringCloud
SpringCloud是目前國內(nèi)使用最廣泛的微服務(wù)框架,集成了各種微服務(wù)功能組件,并基于Springboot實現(xiàn)了這些組件的自動裝配,從而提供了良好的開箱即用體驗
官網(wǎng)地址:https://spring.io/projects/spring-cloud
服務(wù)拆分&遠(yuǎn)程調(diào)用
服務(wù)拆分注意事項:
- 單一職責(zé):不同微服務(wù),不要重復(fù)開發(fā)相同業(yè)務(wù)
- 數(shù)據(jù)獨立:不要訪問其他微服務(wù)的數(shù)據(jù)庫
- 面向服務(wù):將自己的業(yè)務(wù)暴露為接口,供其他微服務(wù)調(diào)用
遠(yuǎn)程調(diào)用:
基于RestTemplate發(fā)起的http請求實現(xiàn)遠(yuǎn)程調(diào)用
http請求做遠(yuǎn)程調(diào)用時與語言無關(guān)的調(diào)用,只要知道對方的ip、端口、接口路徑、請求參數(shù)即可
Eureka注冊中心
Eureka 是 Netflix 公司開發(fā)的一款開源的服務(wù)注冊與發(fā)現(xiàn)組件。
Spring Cloud 將 Eureka 與 Netflix 中的其他開源服務(wù)組件(例如 Ribbon、Feign 以及 Hystrix 等)一起整合進(jìn) Spring Cloud Netflix 模塊中,整合后的組件全稱為 Spring Cloud Netflix Eureka。
Eureka 是 Spring Cloud Netflix 模塊的子模塊,它是 Spring Cloud 對 Netflix Eureka 的二次封裝,主要負(fù)責(zé) Spring Cloud 的服務(wù)注冊與發(fā)現(xiàn)功能。
Spring Cloud 使用 Spring Boot 思想為 Eureka 增加了自動化配置,開發(fā)人員只需要引入相關(guān)依賴和注解,就能將 Spring Boot 構(gòu)建的微服務(wù)輕松地與 Eureka 進(jìn)行整合
在Eureka架構(gòu)中,微服務(wù)角色有兩類:
-
EurekaServer:服務(wù)端,注冊中心
- 記錄服務(wù)信息
-
EurekaClient:客戶端
-
Provider:服務(wù)提供者
- 注冊自己的信息到EurekaServer
- 每隔30秒向EurekaServer發(fā)送心跳
-
consumer:服務(wù)消費者
- 根據(jù)服務(wù)名稱從EurekaServer拉取服務(wù)列表
- 基于服務(wù)列表做負(fù)載均衡,選中一個微服務(wù)后發(fā)起遠(yuǎn)程調(diào)用
-
1.服務(wù)調(diào)用關(guān)系
服務(wù)提供者:暴露接口給其他微服務(wù)調(diào)用
服務(wù)消費者:調(diào)用其他微服務(wù)提供的接口
- 提供者與消費者角色其實是相對的
- 一個服務(wù)可以同時是服務(wù)提供者和服務(wù)消費者
無論是消費者還是提供者,引入eureka-client依賴、知道eureka地址后,都可以完成服務(wù)注冊
2.Eureka的作用
-
消費者該如何獲取服務(wù)提供者具體信息?
-
服務(wù)提供者啟動時向eureka注冊自己的信息
-
eureka保存這些信息
-
消費者根據(jù)服務(wù)名稱向eureka拉取提供者信息
-
-
如果有多個服務(wù)提供者,消費者該如何選擇?
- 服務(wù)消費者利用負(fù)載均衡算法,從服務(wù)列表中挑選一個
-
消費者如何感知服務(wù)提供者健康狀態(tài)?
-
服務(wù)提供者會每隔30秒向EurekaServer發(fā)送心跳請求,報告健康狀態(tài)
-
eureka會更新記錄服務(wù)列表信息,心跳不正常會被剔除
-
消費者就可以拉取到最新的信息
-
3.實現(xiàn)
-
搭建EurekaServer
(1)引入eureka-server依賴
(2)添加@EnableEurekaServer注解
(3)在application.yml中配置eureka地址
-
服務(wù)注冊
(1)引入eureka-client依賴
(2)在application.yml中配置eureka地址
-
服務(wù)發(fā)現(xiàn)
(1)引入eureka-client依賴
(2)在application.yml中配置eureka地址
(3)給RestTemplate添加@LoadBalanced注解
(4)用服務(wù)提供者的服務(wù)名稱遠(yuǎn)程調(diào)用
創(chuàng)建enreka-server
模塊,引入依賴,啟動類上添加注解:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class, args);
}
}
在user-service
模塊引入依賴,配置文件:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
server:
port: 8081
spring:
application:
name: userservice
datasource:
url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
在order-service
模塊引入依賴,配置文件:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
server:
port: 8080
spring:
application:
name: orderservice
datasource:
url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
mybatis:
type-aliases-package: cn.itcast.user.pojo
configuration:
map-underscore-to-camel-case: true
logging:
level:
cn.itcast: debug
pattern:
dateformat: MM-dd HH:mm:ss:SSS
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
在order-service
完成服務(wù)拉?。?/p>
服務(wù)拉取是基于服務(wù)名稱獲取服務(wù)列表,然后在對服務(wù)列表做負(fù)載均衡文章來源:http://www.zghlxwxcb.cn/news/detail-780682.html
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查詢訂單
Order order = orderMapper.findById(orderId);
// 2.查詢用戶
String url = "http://userservice/user/" + order.getUserId();
// String url = "http://localhost:8081/user/" + order.getUserId(); 用服務(wù)名代替ip、端口
User user = restTemplate.getForObject(url, User.class);
//3.封裝user信息
order.setUser(user);
// 4.返回
return order;
}
}
@Bean
@LoadBalanced //負(fù)載均衡
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
文章來源地址http://www.zghlxwxcb.cn/news/detail-780682.html
到了這里,關(guān)于SpringCloud&Eureka學(xué)習(xí)教程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!