ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot 分布式系统简单使用

2022-02-01 13:31:59  阅读:126  来源: 互联网

标签:Dubbo 服务 SpringBoot service dubbo 分布式系统 简单 org public


SpringBoot 分布式系统简单了解

接上节,了解了分布式系统的基本概念和搭建完环境后,用一个简单的例子体验一下分布式服务。

1. 环境搭建

创建一个空的新项目,就命名为 SpringBoot-09-DS 吧。

在其中新建 SpringBoot 项目的模块 provider-server,选择 Web 依赖,代表服务提供者。

在其中编写一个卖书的服务,首先是接口

package com.qiyuan.service;

public interface BookService {
    public String getBook();
}

然后是接口的实现类

package com.qiyuan.service;

public class BookServiceImpl implements BookService{
    @Override
    public String getBook() {
        return "Qiyuanc的笔记";
    }
}

这样服务提供者的服务就完成了,消费者通过 BookService 的服务就可以获取到书。

再新建一个 SpringBoot 项目的模块 consumer-server,也只选择 Web 依赖,作为服务消费者,其中只有一个买书的服务

package com.qiyuan.service;

public class UserService {
    // 消费者要去买书!
}

现在,需要做的就是通过分布式服务,让 consumer-service 程序能使用 provider-service 程序提供的服务!

2. 服务提供者

涉及到分布式服务,要用到 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>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

导入依赖后,就可以在 SpringBoot 的配置文件 application.properties 中进行 dubbo 的属性配置

#当前应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#扫描指定包下服务
dubbo.scan.base-packages=com.qiyuan.service
#应用服务 WEB 访问端口
server.port=8001
#为了不和 Dubbo-Admin 冲突 需要换个端口
dubbo.protocol.port=20881 

配置完成后,就可以通过 @Service 注解将服务发布到注册中心了,注意这个 @Service 是 Dubbo 的而不是 Spring 的(在 Dubbo 2.7 之后为了避免冲突换成了 @DubboService 注解,但用高版本出问题了,只能老实地用老版!)

package com.qiyuan.service;

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

// 作为 Dubbo 的服务发布到注册中心
@Service
// 将本类放到 Spring 容器中
@Component
public class BookServiceImpl implements BookService{
    @Override
    public String getBook() {
        return "Qiyuanc的笔记";
    }
}

当应用启动后,Dubbo 会扫描指定的包下带有 @Service 注解的服务,将它发布到指定的注册中心中。

3. 服务消费者

与服务提供者一样,服务消费者也需要导入 Dubbo 和 ZooKeeper 相关的依赖。

然后在服务消费者的配置文件中进行配置

#当前应用名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#应用服务 WEB 访问端口
server.port=8002

此时本应将提供者的接口打包,交给消费者以 pom 形式导入,从而使消费者在编程时可以使用提供者的接口。不过为了简单测试,此处直接在消费者中加入需要的接口,该接口路径与提供者中一致即可。

然后就可以在消费者中使用提供者的服务了

package com.qiyuan.service;

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

// 交给 Spring
@Service
public class UserService {
    // 消费者要去买书!
    // 远程引用指定的服务,会在注册中心寻找该接口
    @Reference
    BookService bookService;

    public void buyBook(){
        String book = bookService.getBook();
        System.out.println("使用注册中心的服务获得了:"+book+"!");
    }
}

在消费者中编写测试类进行测试

@SpringBootTest
class ConsumerServiceApplicationTests {

	@Autowired
	UserService userService;

	@Test
	void contextLoads() {
        // 消费者调用服务者提供的接口去买书!
		userService.buyBook();
	}

}

服务开启顺序为

  1. 打开 ZooKeeper 注册中心;
  2. 打开 Dubbo-Admin 进行监控;
  3. 开启服务提供者应用;
  4. 开启服务消费者应用,并使用服务!

测试成功(找 BUG 找麻了都)!在 Dubbo-Admin 中也能看到服务提供者提供的接口

简单的分布式服务测试就这样结束了······一会是版本问题,一会是端口问题,折磨的神志不清了。

3. 总结

尝试了通过 SpringBoot + Dubbo + ZooKeeper 进行分布式服务的使用,基本的概念和操作还是比较简单的,即通过注册中心使不同的应用能使用网络进行通信,并使用别的应用提供的服务。后续仍需继续深入。

标签:Dubbo,服务,SpringBoot,service,dubbo,分布式系统,简单,org,public
来源: https://www.cnblogs.com/qiyuanc/p/SpringBoot_TestDistributed.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有