欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用

 更新時間:2023年07月30日 10:47:44   作者:失敗的面  
這篇文章主要給大家介紹了Spring Boot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用的步驟詳解,文中有詳細(xì)的代碼示例,對我們的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下

Spring Boot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用

技術(shù)棧說明

Dubbo:Dubbo作為RPC框架,能在多個服務(wù)之間實現(xiàn)遠(yuǎn)程服務(wù)的調(diào)用。比如有兩個獨(dú)立的微服務(wù)A和B,A服務(wù)想要調(diào)用B服務(wù)時,因為兩者不在同個內(nèi)存空間中,不能直接調(diào)用,所以可以通過Dubbo實現(xiàn)這點(diǎn)。

功能和Spring Cloud的Feign相同,兩者都是應(yīng)用于微服務(wù)架構(gòu)的遠(yuǎn)程調(diào)用框架

Zookeeper:作為注冊中心去管理Dubbo服務(wù),這點(diǎn)和Eureka、Nacos相同。

概述

通過一個示例說明Dubbo+Zookeeper在Spring Boot中的應(yīng)用。

現(xiàn)有兩個服務(wù)provider和consumer,即生產(chǎn)者和消費(fèi)者:

實現(xiàn)步驟

  • 搭建Zookeeper集群服務(wù)作為注冊中心(docker-compose)
  • Spring Boot項目,添加依賴,并創(chuàng)建三個Module:
    • api:提供Service接口,但不實現(xiàn)
    • provider:實現(xiàn)api的Service接口
    • consumer:調(diào)用api的Service接口,并對外提供訪問接口

期望結(jié)果

調(diào)用consumer服務(wù)的訪問接口,能訪問到數(shù)據(jù),則說明provider實現(xiàn)的服務(wù)成功注冊到zookeeper注冊中心,并被consumer獲取到。

實現(xiàn)

Zookeeper集群搭建(docker-compose)

zookeeper.yml:

version: "3"
services:
  zk1:
    image: zookeeper
    network_mode: mynetwork
    container_name: zk1
    restart: always
    hostname: zk1
    # 端口映射,三個容器的對外端口是不同的
    ports:
      - 2181:2181
      - 8081:8080
    # 路徑映射,路徑也要注意不同
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/mycontainers/zk1/data:/data
      - /home/mycontainers/zk1/datalog:/datalog
    environment:
      # 當(dāng)前zk實例的id
      - ZOO_MY_ID=1
      # 整個zk集群的機(jī)器、端口列表
      - ZOO_SERVERS=server.1=0.0.0.0:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk2:
    image: zookeeper
    network_mode: mynetwork
    container_name: zk2
    restart: always
    hostname: zk2
    # 端口映射,三個容器的對外端口是不同的
    ports:
      - 2182:2181
      - 8082:8080
    # 路徑映射,路徑也要注意不同
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/mycontainers/zk2/data:/data
      - /home/mycontainers/zk2/datalog:/datalog
    environment:
      # 當(dāng)前zk實例的id
      - ZOO_MY_ID=2
      # 整個zk集群的機(jī)器、端口列表
      - ZOO_SERVERS=server.1=zk1:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=zk3:2888:3888;2181
  zk3:
    image: zookeeper
    network_mode: mynetwork
    container_name: zk3
    restart: always
    hostname: zk3
    # 端口映射,三個容器的對外端口是不同的
    ports:
      - 2183:2181
      - 8083:8080
    # 路徑映射,路徑也要注意不同
    volumes:
      - /etc/localtime:/etc/localtime
      - /home/mycontainers/zk3/data:/data
      - /home/mycontainers/zk3/datalog:/datalog
    environment:
      # 當(dāng)前zk實例的id
      - ZOO_MY_ID=3
      # 整個zk集群的機(jī)器、端口列表
      - ZOO_SERVERS=server.1=zk1:2888:3888;2181 server.2=zk2:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181

啟動服務(wù):

docker-compose -f zookeeper.yml up

訪問Zookeeper:http://mylocalhost:8081/commands

有Json結(jié)果輸出表示Zookeeper服務(wù)啟動成功。

Spring Boot添加Dubbo依賴

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.4.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>3.1.0</version>
        </dependency>
    </dependencies>
</dependencyManagement>
<!--使用阿里云的Maven源-->
<repositories>
    <repository>
        <id>aliyunmaven</id>
        <name>aliyun</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </repository>
</repositories>

dubbo-api代碼

僅提供接口,不提供實現(xiàn),讓provider去實現(xiàn)代碼,來驗證provider和consumer之間的脫藕。

/service
	TimeService
package com.cc.service;
import java.time.LocalDateTime;
public interface TimeService {
    LocalDateTime getTime();
}

dubbo-provider代碼

provider和consumer的pom.xml是一致的:

<dependencies>
    <!--springboot啟動器-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-registry-zookeeper</artifactId>
    </dependency>
    <dependency>
        <groupId>com.com.cc</groupId>
        <artifactId>dubbo-api</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

application.yml

server:
  port: 8081
dubbo:
  application:
    name: provider-app
  registry:
    address: zookeeper://mylocalhost:2181

provider去實現(xiàn)類的接口,TimeServiceImpl.java:

package com.cc.service.impl;
import com.cc.service.TimeService;
import org.apache.dubbo.config.annotation.DubboService;
import java.time.LocalDateTime;
// 使用這個注解,可以將該接口實現(xiàn)注冊到注冊中心
@DubboService
public class TimeServiceImpl implements TimeService {
    @Override
    public LocalDateTime getTime() {
        return LocalDateTime.now();
    }
}

啟動類需要添加@EnableDubbo注解:

@EnableDubbo
@SpringBootApplication
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

dubbo-consumer代碼

application.yml:

server:
  port: 8082
dubbo:
  application:
    name: consumer-app
  registry:
    address: zookeeper://mylocalhost:2181

對外提供訪問接口:

@RestController
public class ConsumerController {
    @DubboReference
    private TimeService timeService;
    @GetMapping("/")
    public String getTime() {
        return timeService.getTime().format(DateTimeFormatter.ISO_DATE_TIME);
    }
}

記得添加@Dubbo注解:

@EnableDubbo
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

驗證

現(xiàn)在去訪問:http://localhost:8082/

有結(jié)果則表示驗證通過。

到此這篇關(guān)于SpringBoot整合Dubbo+Zookeeper實現(xiàn)RPC調(diào)用的文章就介紹到這了,更多相關(guān)SpringBoot RPC調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析

    SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析

    這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Spring中@Lazy注解的使用技巧與實例解析

    Spring中@Lazy注解的使用技巧與實例解析

    @Lazy注解在Spring框架中用于延遲Bean的初始化,優(yōu)化應(yīng)用啟動性能,它不僅適用于@Bean和@Component,還可以用于注入點(diǎn),通過將Bean的初始化延遲到第一次使用時,可以減少不必要的資源消耗,本文介紹Spring中@Lazy注解的使用技巧與實例解析,感興趣的朋友一起看看吧
    2025-03-03
  • Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹

    Spring緩存注解@Cacheable @CacheEvit @CachePut使用介紹

    Spring在3.1版本,就提供了一條基于注解的緩存策略,實際使用起來還是很絲滑的,本文將針對幾個常用的注解進(jìn)行簡單的介紹說明,有需要的小伙伴可以嘗試一下
    2021-07-07
  • 詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法

    詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法

    本文主要介紹了詳解Spring Cloud Zuul網(wǎng)關(guān)修改為短連接方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • Java編程中的HashSet和BitSet詳解

    Java編程中的HashSet和BitSet詳解

    這篇文章主要介紹了Java編程中的HashSet和BitSet詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 詳解Spring mvc的web.xml配置說明

    詳解Spring mvc的web.xml配置說明

    本篇文章主要介紹了Spring mvc的web.xml配置說明,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • spring實現(xiàn)bean對象創(chuàng)建代碼詳解

    spring實現(xiàn)bean對象創(chuàng)建代碼詳解

    這篇文章主要介紹了spring實現(xiàn)bean對象創(chuàng)建代碼詳解,具有一定借鑒價值,需要的朋友可以參考下
    2017-12-12
  • 詳解springboot+mybatis-plue實現(xiàn)內(nèi)置的CRUD使用詳情

    詳解springboot+mybatis-plue實現(xiàn)內(nèi)置的CRUD使用詳情

    這篇文章主要介紹了詳解springboot+mybatis-plue實現(xiàn)內(nèi)置的CRUD使用詳情,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring Boot中使用RSocket的示例代碼

    Spring Boot中使用RSocket的示例代碼

    這篇文章主要介紹了Spring Boot中使用RSocket的示例代碼,特別是spring boot 如何幫助抽象出更低級別的RSocket API,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Maven編譯文件的編碼設(shè)置方法

    Maven編譯文件的編碼設(shè)置方法

    在使用Maven進(jìn)行Java項目的構(gòu)建時,正確的文件編碼設(shè)置對于確保項目能夠正確編譯和運(yùn)行至關(guān)重要,本文將詳細(xì)介紹如何在Maven中設(shè)置編譯文件的編碼,以確保項目能夠正確處理各種語言的文本內(nèi)容,需要的朋友可以參考下
    2025-02-02

最新評論