springboot-分布式架构简单测试

1 启动zookeeper服务端

参考地址:springboot-安装zookeeper

2 创建两个项目

服务提供者 : 创建一个springboot项目命名为 provider-server ,创建过程中添加web模块

服务消费者 : 创建一个springboot项目命名为 consumer-server ,创建过程中添加web模块

参考地址:springboot-hello world

3 在provider-server项目中导入依赖

provider-server:pom.xml

<!--导入依赖:Dubbo + zookeeper-->
<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>

4 在provider-server项目中编写一个要提供服务

新建一个service包,并在该包下,编写一个TicketService接口和对应的TicketServiceImpl实现类

provider-server:src/main/java/com/lv/service/TicketService.java

package com.lv.service;

public interface TicketService {
    public String getTicket();
}

provider-server:src/main/java/com/lv/service/TicketServiceImpl.java

package com.lv.service;

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

//zookeeper:服务注册与发现

@Service //可以被扫描到,在项目启动就自动注册到注册中心
@Component //使用了Dubbo后尽量不要用Service注解
public class TicketServiceImpl implements TicketService{
    @Override
    public String getTicket() {
        return "一四三三二二三";
    }
}

5 编写provider-server项目的配置文件

provider-server:src/main/resources/application.properties

server.port=8001

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

6 启动provider-server项目,查看dubbo admin后台

查看dubbo admin后台参考地址:springboot-安装dubbo-admin

通过dubbo admin可以查看到服务详情

7 在consumer-server项目中导入依赖

consumer-server:pom.xml

与本篇博客第3步导入的依赖完全相同

8 编写consumer-server项目的配置文件

server.port=8002

#消费者去哪里拿服务需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心的地址,可以在任何的电脑上
dubbo.registry.address=zookeeper://127.0.0.1:2181

9 在consumer-server项目中编写获取服务的类

创建一个service包,并在该包新建一个接口:这个接口要与提供服务的接口路径名完全相同,需要获取的内容也要与提供服务的接口对应

consumer-server:src/main/java/com/lv/service/TicketService.java

package com.lv.service;

public interface TicketService {
    public String getTicket();
}

在service包再编写一个UserService,作为获取服务的类

consumer-server:src/main/java/com/lv/service/UserService.java

package com.lv.service;

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

@Service //放到容器中
public class UserService {
    //想拿到provider-server提供的票,要去注册中心拿到服务
    @Reference //引用,Pom坐标,可以定义路径相同的接口名
    TicketService ticketService;
    public void buyTicket(){
        String ticket = ticketService.getTicket();
        System.out.println("在注册中心拿到=>"+ticket);
    }
}

10 编写consumer-server项目的测试类

consumer-server:src/test/java/com/lv/ConsumerServerApplicationTests.java

package com.lv;

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

11 启动consumer-server测试类,查看控制台

成功实现了服务注册和发现

12 步骤总结

提供者提供服务:

  • 导入依赖
  • 配置注册中心的地址,以及服务发现名,和要扫描的包
  • 在想要被注册的服务上面增加一个@Service注解

消费者如何消费

  • 导入依赖
  • 配置注册中心的地址和自己的服务名
  • 从远程注入服务
posted @ 2022-03-12 14:36  从0开始丿  阅读(85)  评论(0编辑  收藏  举报