SpringBoot+Dubbo+zookeeper服務注冊發現實戰


1.利用IDEA創建一個空項目

 

 

 2.創建一個模塊(提供者服務):

 下一步:

 

下一步:

 

 

 

 

 下一步:

 

 

 創建模塊成功,一般刪除  .gitignore、HELP.md、mvnw、mvnw.cmd和.mvn文件夾。使項目看起來更清爽!!

 

 

 3.編寫提供者服務

①創建java interface文件,名命為:TicketServer

package com.ckfuture.service;

public interface TicketServer {
    public String getTicket();
}

②創建 接口實現類,名命為TicketServerImpl

 
         
package com.ckfuture.service;

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

//服務注冊與發現

@Service //可以被掃描到,在項目啟動就自動注冊到注冊中心
@Component //使用了Dubbo后盡量不要用Service注解
public class TicketServerImpl implements TicketServer {

@Override
public String getTicket() {
return "<創客未來>";
}
}

③修改一下提供者服務的端口(provider-server/resources/application.properties)

server.port=8001

④導入dubbo和zookeeper的依賴,並處理日志沖突

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>2.7.3</version>
</dependency>

zookeeper的jar包是zkclient

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

成功導入:

 

 

 對於日志沖突的處理:

<!-- dubbo-spring-boot-starter-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!-- 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>

⑤修改配置(provider-server/resources/application.properties)

server.port=8009

#服務應用名字
dubbo.application.name=provider-server
#注冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服務要被注冊
dubbo.scan.base-packages=com.ckfuture.service

⑥啟動provider-server服務並在dubbo-admin中查看

 

 

 

 

 

 

 

 

 

4.創建一個模塊(消費者服務)

 

 

 

 

 

 ①導入相關依賴

<!-- dubbo-spring-boot-starter-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!-- 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>

②修改配置(consumer-server/resources/application.properties)

server.port=8002

#消費者去哪里獲取服務,需要暴露自己的名字,
# 否則注冊中心不知道誰要服務
dubbo.application.name=consumer-server
#注冊中心的地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

③創建一個UserServer.class 消費服務

package com.ckfuture.service;

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

@Service //放到容器中
public class UserService {

    //想拿到provider-server提供的服務,要去注冊中心拿到服務
    @Reference //引用,Pom坐標,可以定義路徑相同的接口名
    TicketServer ticketServer;

    public void buyTicket(){
        String ticket = ticketServer.getTicket();
        System.out.println("在注冊中心獲取一張票:"+ticket);

    }
}

在這里通過“Reference”獲取注冊中心的服務。在本地要建立提供者一樣的TicketServer接口類。即“定義路徑相同的接口名”,否則找不到服務提供者。

 

 

 ④在測試類中測試一下獲取服務

package com.ckfuture;

import com.ckfuture.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();
    }

}

 

 

 

 

 

 如果運行消費者服務,在注冊中心也可以查看到:

 

 

步驟:

前提:zookeeper服務要開啟

1.提供者提供服務

  1).導入依賴

  2).配置注冊中心的地址,以及服務發現名,和要掃描的包

  3).在想要被注冊的服務上面增加一個注解@Service

2.消費者如何消費

  1).導入依賴

  2).配置注冊中心的地址,配置自己的服務名

  3).從遠程注入服務 @Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM