分佈式架構:dubbo+zookeeper+springboot整合~~demo

前言:

學會此框架後讓我對微服務的理解更加深入java

本篇主要將的是dubbo+zookeeper+springboot的整合並測試,需看完個人前兩篇博客《dubbo理論》和《zookeeper》才能看懂本篇文章git

 

環境配置

zookeeper環境(註冊中心)github

dubbo-admin:github下載,是一個監控後臺,輪詢的方式查看註冊了那些服務,那些服務被消費了web

dubbo (jar包,也能夠導入maven依賴)spring

注意:在啓用分佈式架構項目時,應先開啓zkserver(zookeeper服務)-->dubbo-admin(服務監控可視化)-》最後再運行springboot項目apache

 

dubbo-admin安裝

能夠不安裝,由於它僅僅是一個監控服務的可視化api

1.下載dubbo-admintomcat

地址 :https://github.com/apache/dubbo-admin/tree/masterspringboot

二、解壓進入目錄服務器

修改 dubbo-admin\src\main\resources \application.properties 指定zookeeper地址

server.port=7001
spring.velocity.cache=false
spring.velocity.charset=UTF-8
spring.velocity.layout-url=/templates/default.vm
spring.messages.fallback-to-system-locale=false
spring.messages.basename=i18n/message
spring.root.password=root
spring.guest.password=guest

dubbo.registry.address=zookeeper://127.0.0.1:2181

3.在項目目錄下打包dubbo-admin,cmd指令(用管理員權限)

 也能夠用maven或idea打成jar包

mvn clean package -Dmaven.test.skip=true

4.找到指定目錄下的dubbo-admin.jar(用cmd指令運行)

java -jar dubbo-admin.jar

注意:再運行dubbo-admin前需開啓zookeeper服務,

 

zookeeper開啓成功界面

 

 

dubbo-admin開啓成功界面

 

 

 

 

執行完畢,咱們去訪問一下 http://localhost:7001/ , 這時候咱們須要輸入登陸帳戶和密碼,咱們都是默認的root-root;

證實dubbo-admin安裝成功

 

框架搭建

新建兩個springboot項目模塊,用來模仿服務提供者,和服務消費者,項目進導入web便可

1.提供者搭建配置

導入相關依賴

        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除這個slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

 

在properties中配置dubbo信息

server.port=8001
#當前應用名字
dubbo.application.name=provider-server
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#掃描指定包下服務
dubbo.scan.base-packages=com.king.service

注意:我是在一臺服務器上跑兩個項目因此我由額外配置了tomcat的端口號

 

建一個service接口和實現類

package com.king.service;

public interface TicketService {

    public String getTicket();

}
package com.king.service;

import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

//zookeeper服務的註冊與發現

@Service    //被掃描到,在項目啓動中就自動註冊到註冊中心,將服務發佈出去,註解註解來源:apache,
@Component  //放到spring容器中
public class TicketServiceImpl implements TicketService{
    @Override
    public String getTicket() {
        return "《分佈式系統之路》";
    }
}

注意:註解@Service調的是dubbo的,做用:讓dubbo框架掃描的

 

到這裏簡單的服務提供者就完成了,下面運行主啓動類,測試

注意:在啓動項目時,先以開啓zkserver-->dubbo-admin-->springboot項目的順序一次打開,不然報錯!!!

經過dubbo-admin的7001端口就能夠查看是否註冊成功

 

 

2.服務消費者搭建

導入相關依賴。跟提供者同樣的依賴

        <!--dubbo-->
        <!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--zookeeper-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除這個slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

 

在application.properties配置消費者信息

server.port=8082

#當前應用名字
dubbo.application.name=consumer-server
#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

 

 新建server類

注意:正常企業級開發,服務的發現過程是經過導報指定的服務接口得到,讓後經過pom引入,此處爲了方便就直接引用了,引用方式看代碼

import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    //咱們須要去拿註冊中心的服務
    //需求:如今咱們的用戶想使用買票的服務,這要怎麼弄呢 ?
    @Reference //僅需定義相同路徑和名字相同的接口就能使用 ,企業用pom座標
    TicketService ticketService;

    public void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("在註冊中心拿到=》"+ticket);
    }

}

 

這個做用就是接收引用信息的接口

package com.king.service;

public interface TicketService {

    public String getTicket();

}

 

單元測,並運行

import com.king.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class ConsumerServerApplicationTests {

    @Autowired
    UserService userService;

    @Test
    void contextLoads() {

        userService.buyTicket();

    }

}

 

 

 

總結

相關文章
相關標籤/搜索