真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

SpringCloudAlibaba+Nacos+Dubbo如何進行零成本實現(xiàn)RPC調(diào)用

Spring Cloud Alibaba+Nacos+Dubbo如何進行零成本實現(xiàn)RPC調(diào)用,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

成都創(chuàng)新互聯(lián)公司專注于荊州企業(yè)網(wǎng)站建設(shè),成都響應式網(wǎng)站建設(shè)公司,商城網(wǎng)站開發(fā)。荊州網(wǎng)站建設(shè)公司,為荊州等地區(qū)提供建站服務。全流程定制網(wǎng)站建設(shè),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務

dubbo的rpc框架學習成本較高,代碼入侵性強,本身生態(tài)不完整,需要整合多個外部組件,故選擇了相對性能弱一點的Spring Cloud全家桶。

直到Spring Cloud Alibaba的出現(xiàn),使用Nacos作為服務發(fā)現(xiàn)與注冊,同時兼容使用Feign的http方式和使用dubbo的rpc方式調(diào)用。

Spring Cloud 為什么需要RPC

在Spring Cloud構(gòu)建的微服務系統(tǒng)中,大多數(shù)的開發(fā)者使用都是官方提供的Feign組件來進行內(nèi)部服務通信,這種聲明式的HTTP客戶端使用起來非常的簡潔、方便、優(yōu)雅,并且和開發(fā)平臺、語言無關(guān),但是通常情況下,HTTP并不會開啟KeepAlive功能,即當前連接為短連接,短連接的缺點是每次請求都需要建立TCP連接,這使得其效率變的相當?shù)拖隆?/p>

對外部提供REST API服務是一件非常好的事情,但是如果內(nèi)部調(diào)用也是使用HTTP調(diào)用方式,就會顯得顯得性能低下,Spring Cloud默認使用的Feign組件進行內(nèi)部服務調(diào)用就是使用的HTTP協(xié)議進行調(diào)用,這時,我們?nèi)绻麅?nèi)部服務使用RPC調(diào)用,對外使用REST API,將會是一個非常不錯的選擇。

引用至:Dubbo 與 Spring Cloud 完美結(jié)合

使用Dubbo Spring Cloud使用內(nèi)部的RPC協(xié)議調(diào)用幾乎是零成本的改造。

一、系統(tǒng)結(jié)構(gòu)

Spring Cloud Alibaba+Nacos+Dubbo如何進行零成本實現(xiàn)RPC調(diào)用

  • cloud-gateway 作為cloud集群的網(wǎng)關(guān),外部的路由轉(zhuǎn)發(fā)使用http協(xié)議,內(nèi)部的服務調(diào)用使用dubbo協(xié)議

  • cloud-usercloud-mq之間的遠程調(diào)用使用dubbo協(xié)議

  • 使用Nacos作為服務注冊與發(fā)現(xiàn)配置中心的服務

  • 使用Sentinel作為服務間httpdubbo調(diào)用的流量控制服務

目錄結(jié)構(gòu)

├── cloud-admin         # 服務監(jiān)控
├── cloud-gateway       # 服務網(wǎng)關(guān)
├── cloud-mq            # mq服務
├── cloud-provider      # 服務接口
└── cloud-user          # user服務

二、服務接口提供方實現(xiàn)

1. 服務接口定義

public interface UserProvider {
    UserDTO checkUser(String userName, String password);
    UserDTO findByUserName(String userName);
}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserDTO implements Serializable {
    String userName;
    String realName;
    String password;
}
  • 服務接口是服務提供方和消費方的契約,包含服務的方法傳輸對象DTO。由于涉及多個應用服務的引入,最好是將其獨立成Module

  • DTO對象必須實現(xiàn)Serializable接口

2. 引入dubbo包

POM

 
    com.alibaba.cloud
    spring-cloud-starter-dubbo


    org.springframework.boot
    spring-boot-starter-actuator

spring-boot-starter-actuator 也是必須的

3. 服務接口實現(xiàn)

import org.apache.dubbo.config.annotation.Service;

@Service
public class UserProviderImpl implements UserProvider {

    @Autowired
    private UserService userService;

    @Override
    public UserDTO checkUser(String userName, String password) {

        User user = userService.checkUser(userName, password);
        return UserConvertor.toDTO(user);
    }

}

@Service必須是org.apache.dubbo.config.annotation.Service

4. 配置dubbo服務相關(guān)的信息

spring:
  main:
    allow-bean-definition-overriding: true
    
dubbo:
  scan:
    base-packages: fun.barryhome.cloud.provider   #指定 Dubbo 服務實現(xiàn)類的掃描基準包
  protocols:
    dubbo:
      name: dubbo   # Dubbo 的協(xié)議名稱
      port: -1      # port 為協(xié)議端口( -1 表示自增端口,從 20880 開始)

  registry:
    address: spring-cloud://localhost       # 掛載到 Spring Cloud 注冊中心

啟動后有可能出現(xiàn)連接失敗,不影響使用

java.net.ConnectException: Connection refused (Connection refused)
	at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_111]
	at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111]
	at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111]

三、服務調(diào)用方實現(xiàn)

1. 引入依賴包



    fun.barryhome
    cloud-provider
    0.0.1-SNAPSHOT
    compile

 
    com.alibaba.cloud
    spring-cloud-starter-dubbo


    org.springframework.boot
    spring-boot-starter-actuator

2. 調(diào)用服務接口

import org.apache.dubbo.config.annotation.Reference;

public class UserController {

    @Reference
    private UserProvider userProvider;

    @GetMapping(value = "/sessionUser")
    public UserDTO sessionUser(HttpServletRequest request) {

        String userName = request.getHeader("X-User-Name");
        if (Strings.isEmpty(userName)) {
            throw new RuntimeException("沒有找到用戶");
        }

        return userProvider.findByUserName(userName);
    }
}

3. 配置dubbo服務相關(guān)的信息

dubbo:
  cloud:
    subscribed-services: cloud-user   # 服務提供方的服務名
  consumer:
    check: false
    loadbalance: "leastactive"    # 最小活躍數(shù)負載均衡

  registry:
    # 掛載到 Spring Cloud 注冊中心
    address: spring-cloud://localhost

dubbo.consumer.check:用于啟動時是否檢查服務提供方是否運行正常,如果不正常將不能啟動調(diào)用方

dubbo.consumer.loadbalance:負載均衡策略

  • RandomLoadBalance:隨機,按權(quán)重設(shè)置隨機概率

  • ConsistentHashLoadBalance:一致性哈希算法

  • LeastActiveLoadBalance:最小活躍數(shù)負載均衡

  • RoundRobinLoadBalance:根據(jù)權(quán)重進輪訓

四、總結(jié)

  1. 服務間使用了長連接,在正常運行時,提供方某個節(jié)點斷掉后會需要一段時間來切換,可使用sentinel來控制快速切換可用節(jié)點

  2. 使用dubbo進行遠程調(diào)用,內(nèi)部調(diào)用性能上有所提供,調(diào)用方式上也相對簡單

  3. sentinel配合,合理使用負載策略,可實現(xiàn)更多功能,如灰度發(fā)布,版本控制等

  4. 性能的提升讓調(diào)用鏈增加成為可能性,可實現(xiàn)更小粒度的微服務拆分與組合

看完上述內(nèi)容,你們掌握Spring Cloud Alibaba+Nacos+Dubbo如何進行零成本實現(xiàn)RPC調(diào)用的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


本文標題:SpringCloudAlibaba+Nacos+Dubbo如何進行零成本實現(xiàn)RPC調(diào)用
網(wǎng)頁路徑:http://weahome.cn/article/goishj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部