SpringBoot分佈式篇Ⅶ --- 整合Dubbo

在分佈式系統中, 國內經常使用zookeeper+dubbo組合,而Spring Boot推薦使用全棧的Spring,Spring Boot,Spring Cloud。 linux

分佈式系統:git

 

一.Zookeeper和Dubbo概覽github

1.1 ZooKeeperspring

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

1.2 Dubbo架構

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

Dubbo體系結構:框架

二.Zookeeper的安裝與啓動分佈式

在linux虛擬機上用docker安裝zookeeper:ide

docker pull registry.docker-cn.com/library/zookeeper

docker啓動zookeeper並進行端口映射:

docker run --name some-zookeeper -p 2181:2181 --restart always -d zookeeper

.整合Dubbo

建立兩個項目,一個項目做爲服務提供者,一個項目做爲服務消費者。

3.1 服務提供者註冊到註冊中心

3.1.1 引入dubbo和zkclient的相關依賴: <!--1.引入dubbo-spring-boot-starter-->

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <!--2.引入zookeeper的客戶端工具-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

3.1.2 配置dubbo的掃描包和註冊中心地址:

dubbo.application.name=provider-ticket
dubbo.registry.address=zookeeper://***.**.**.**:2181
dubbo.scan.base-packages=com.wang.ticket.service

3.1.3 開啓dubbo的註解:

@EnableDubbo  //開啓dubbo註解
@SpringBootApplication
public class ProviderTicketApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderTicketApplication.class, args);
    }
}

3.1.4 使用@Service(com.alibaba.dubbo.config.annotation.Service)發佈服務:

先編寫Service接口: 

package com.wang.ticket.service;
public interface TicketService {
    String getTicket();
}

實現接口:

@Component
@Service //注意這邊是com.alibaba.dubbo.config.annotation.Service
//主要做用是將服務發佈出去
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《毒液:致命守護者》";
    }
}

完成上訴步驟後啓動該服務項目,保持運行狀態,以便消費者使用。

3.2 服務消費者消費服務

3.2.1 在消費者項目的pom文件中引入dubbo和zkclient

 <!--1.引入dubbo-spring-boot-starter-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <!--2.引入zookeeper的客戶端工具-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

3.2.2 建立服務發佈的service接口,要求全類名與發佈的徹底相同

package com.wang.ticket.service;
public interface TicketService {
    String getTicket();
}

3.2.3 配置註冊中心地址

dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://172.16.80.34:2181

3.2.4 消費註冊中心服務

@Service //org.springframework.stereotype.Service
public class UserService {
    @Reference //引入註冊中心的服務,按照全類名匹配,在註冊中心找到對應的服務
    TicketService ticketService;
    public void  hello(){
        String ticket = ticketService.getTicket();
        System.out.println(ticket);
    }
}

 3.2.5 測試

測試只須要注入UserService,並調用該方法,若能成功調用說明dubbo服務以及調用成功了

相關文章
相關標籤/搜索