【WEEK16】 【DAY2】 Dubbo and Zookeeper Integration Part 2【English Version】

2024.6.11 Tuesday
Following 【WEEK15】 【DAY4】Dubbo and Zookeeper Integration Part 1【English Version】

18. Dubbo and Zookeeper Integration

18.3. Setting Up the Test Environment

18.3.4. Installing dubbo-admin on Windows

Dubbo itself is not a service software. It is actually a jar package that helps your Java program connect to Zookeeper and use Zookeeper to consume and provide services. However, to better manage and monitor numerous Dubbo services, the official team provides a visual monitoring program, dubbo-admin. Though, the monitoring program is optional.

18.3.4.1. Download dubbo-admin

https://github.com/apache/dubbo-admin/tree/develop Insert image description here

Now the official website only has the develop version. The master version can be downloaded from this link: https://github.com/wikerx/dubbo-admin-master
Proceed with the subsequent operations using the master version.

18.3.4.2. Extract and Enter the Directory

Modify the dubbo-admin\src\main\resources\application.properties file to specify the Zookeeper address (if not modified earlier, no need to modify it now).

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
# Zookeeper address for the registry
dubbo.registry.address=zookeeper://127.0.0.1:2181
18.3.4.3. Package dubbo-admin in the Project Directory

Insert image description here

Run:

mvn clean package -Dmaven.test.skip=true

Insert image description here

18.3.4.4. Execute dubbo-admin-0.0.1-SNAPSHOT.jar in dubbo-admin\target Directory

Insert image description here

Run:

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

Insert image description here

At this point, the Zookeeper service must be running, otherwise it cannot be queried.
After execution, visit http://localhost:7001/, enter the default username and password (both are root).
Insert image description here
After clicking “Login”:
Insert image description here

You can check the system logs:
Insert image description here

18.4. SpringBoot + Dubbo + Zookeeper

18.4.1. Framework Setup

18.4.1.1. Create an Empty Project Dubbo_zookeeper

Insert image description here

18.4.1.2. Create a New Module provider-server

Insert image description here
Add web support:
Insert image description here
Delete unnecessary files:
Insert image description here

18.4.1.2.1. Create a service folder and add TicketService.java and TicketServiceImpl.java
Insert image description here

18.4.1.2.2. TicketService.java

package com.P60.service;

public interface TicketService {
    public String getTicket();
}

18.4.1.2.3. TicketServiceImpl.java

package com.P60.service;

public class TicketServiceImpl implements TicketService {
    @Override   // Override method using alt+insert
    public String getTicket() {
        return "Dubbo+Zookeeper";
    }
}
18.4.1.3. Create a New Module consumer-server

Insert image description here
Add web support:
Insert image description here
Delete unnecessary files:
Insert image description here

18.4.1.3.1. Create a service folder and add UserService.java
Insert image description here

package com.P60.service;

public interface UserService {
    // Need to retrieve the ticket from the provider-server in the registry center
}

18.4.2. Modify provider-server (Service Provider)

18.4.2.1. Import Dependencies

To register the service provider to the registry center, we need to integrate Dubbo and Zookeeper, so we need to import the necessary packages.
18.4.2.1.1. Dubbo Spring Boot Starter

https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter/2.7.3
<!-- 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>

18.4.2.1.2. ZooKeeper Client

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

As usual, modify the Maven, JDK, and Java version settings in the Project Structure. Change the springframework version to 2.7.13 in the pom.xml file and reload Maven.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>provider-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>provider-server</name>
    <description>provider-server</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!--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 client-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--zookeeper server and framework packages-->
        <!-- Include 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>
            <!--Exclude slf4j-log4j12 to resolve logging conflicts-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
18.4.2.3. Modify application.properties
# Refer to the configuration file in D:\dubbo-admin-master-master\dubbo-admin\src\main\resources\application.properties
spring.application.name=provider-server
server.port=8001
# Current application name
dubbo.application.name=provider-server
# Registry center address
dubbo.registry.address=zookeeper://127.0.0.1:2181
# Scan services in the specified package (need to register)
dubbo.scan.base-packages=com.P60.service
18.4.2.4. Modify TicketServiceImpl.java
package com.P60.service;

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

// Avoid using the Service annotation due to name conflict between Spring and Dubbo
@Service    // Makes the project scan and automatically register to the registry
@Component  // Store in the container
public class TicketServiceImpl implements TicketService {
    @Override   // alt+insert to override method
    public String getTicket() {
        return "Dubbo+Zookeeper";
    }
}
18.4.2.5. Run ProviderServerApplication

Remember to run zkServer.cmd first, and it can be accessed through dubbo-admin-0.0.1-SNAPSHOT.jar.
Visit http://localhost:7001/
Select “Service Governance” -> “Providers”
Insert image description here
See “Providers”:
Insert image description here

Click 172.18.20.16:20880 to view the provider
Insert image description here

18.4.3. Service Consumer

18.4.3.1. Modify pom.xml (similar to provider)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>consumer-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>consumer-server</name>
    <description>consumer-server</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!--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 client-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

        <!--zookeeper server and framework packages-->
        <!-- Include 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>
            <!--Exclude slf4j-log4j12 to resolve logging conflicts-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <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>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
18.4.3.2. Modify application.properties
spring.application.name=consumer-server
server.port=8002

# Consumers need to expose their names to get services
dubbo.application.name=consumer-server
# Address of the registry center, can be on any computer
dubbo.registry.address=zookeeper://127.0.0.1:2181
18.4.3.3. Modify UserService.java
package com.P60.service;

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

@Service    // Just call the interface and inject it into the container
public class UserService {  // Cannot be written as an Interface because interfaces are abstract and cannot call abstract classes
    // Need to get the ticket from provider-server in the registry center -> Remote reference to the specified service, match by full class name, see who registered this full class name to the registry center
    @Reference  // Reference: two solutions (1. use pom coordinates; 2. define the same interface name path)
    // Here we use the second method: directly copy TicketService from provider-server to consumer-server
    TicketService ticketService;

    public void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("Retrieved from registry center: " + ticket);
    }
}
18.4.3.4. Modify and run ConsumerServerApplicationTests.java
package com.P60;

import com.P60.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  // Inject into local application using Autowired instead of Reference
    UserService userService;
    @Test
    void contextLoads() {
        userService.buyTicket();
    }
}

Insert image description here
Insert image description here
This is the application of SpringBoot + dubbo + zookeeper to achieve distributed development, essentially a service splitting concept.

  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值