SpringBoot(十九)——————Spring Boot與分佈式、ZooKeeper、Dubbo

參考源碼說明:https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md

Dubbo版本升級說明:https://github.com/apache/dubbo-spring-boot-project/releases

源碼地址:https://github.com/877148107/springboot_integrate/tree/master/springboot-integrate-dubbo-provider

目錄

分佈式應用

ZooKeeper

Dubbo

安裝 ZooKeeper

1、docker拉取ZooKeeper鏡像

 2、啓動ZooKeeper鏡像

SpringBoot整合 ZooKeeper、Dubbo

1、創建一個提供者工程

1)、引入pom依賴

2)、配置dubbo屬性

3)、將服務發佈出去

4)、啓動工程

2、創建一個消費者工程

1)、引入pom依賴

2)、配置dubbo屬性

3)、新建一個服務提供接口

4)、遠程引用

 5)、測試

 錯誤信息


  • 分佈式應用

在分佈式系統中,國內常用zookeeper+dubbo組合,而Spring Boot推薦使用全棧的Spring,Spring Boot+Spring Cloud。分佈式當中涉及到遠程過程調用RPC框架,以前大多數都是使用的webservice進行調用但是這樣調用比較麻煩,因此現在基本上都使用了RPC框架dubbo、Springcloud。

在分佈式應用調用的過程就會使用的一個註冊中心(zookeeper)和遠程過程調用(dubbo)

  • ZooKeeper

ZooKeeper官網:https://zookeeper.apache.org

ZooKeeper 是一個分佈式的,開放源碼的分佈式應用程序協調服務。它是一個爲分佈式應用提供一致性服務的軟件,提供的功能包括:配置維護、域名服務、分佈式同步、組服務等。Zookeeper主要是作爲註冊中心使用。

  • Dubbo

Dubbo官網:http://dubbo.apache.org/zh-cn/

Dubbo是Alibaba開源的分佈式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo採用的是一種非常簡單的模型,要麼是提供方提供服務,要麼是消費方消費服務,所以基於這一點可以抽象出服務提供方(Provider)和服務消費方(Consumer)兩個角色。

dubbo主要用於分佈式服務調用框架。

工作圖:

  • 安裝 ZooKeeper

1、docker拉取ZooKeeper鏡像

[root@localhost ~]# docker pull zookeeper

 2、啓動ZooKeeper鏡像

[root@localhost ~]# docker run --name zk01 -p 2181:2181 --restart always -d bbebb888169c 

  • SpringBoot整合 ZooKeeper、Dubbo

1、創建一個提供者工程

springboot-integrate-dubbo-provider,服務提供者提供一個買票服務。詳細代碼見源碼

1)、引入pom依賴

<!--引入dubbo依賴-->
        <!-- https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.1</version>
        </dependency>

2)、配置dubbo屬性

#名稱
dubbo.application.name=springboot-integrate-dubbo-provider
#發佈到註冊中心的地址
dubbo.registry.address=zookeeper://192.168.0.113:2181
#將那個包下的服務發佈出去
dubbo.scan.base-packages=com.wmy.integrate.service

3)、將服務發佈出去

@org.apache.dubbo.config.annotation.Service

@Component
@Service
public class TicketServiceImpl implements TicketService{

    @Override
    public String buyTicket() {
        return "《熊出沒》";
    }
}

4)、啓動工程

2、創建一個消費者工程

springboot-integrate-dubbo-consume,消費者去買一張票,。詳細代碼見源碼

1)、引入pom依賴

<!--引入dubbo依賴-->
        <!-- https://github.com/apache/dubbo-spring-boot-project/blob/0.2.x/README_CN.md -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.1.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>4.0.1</version>
        </dependency>

2)、配置dubbo屬性

#服務消費者名稱
dubbo.application.name=springboot-integrate-dubbo-consume
#註冊中心的地址
dubbo.registry.address=zookeeper://192.168.0.113:2181

3)、新建一個服務提供接口

包路徑、名稱和類名都一樣


public interface TicketService {

    String buyTicket();
}

4)、遠程引用

@Reference

@Service
public class UserService {

    @Reference
    TicketService ticketService;

    public void bugTicket(){
        String ticket = ticketService.buyTicket();
        System.out.println("電影票:"+ticket);
    }
}

 5)、測試

@SpringBootTest
class SpringbootIntegrateDubboConsumeApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {
        userService.getTicket();
    }

}

  •  錯誤信息

1.java.lang.NoClassDefFoundError: org/apache/curator/framework/CuratorFrameworkFactory

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.13.0</version>
        </dependency>

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章