SpringBoot(十三)——分布式

十七、SpringBoot与分布式

Dubbo/Zookeeper
1、分布式应用

在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud。
分布式系统:
在这里插入图片描述

2、Zookeeper和Dubbo

ZooKeeper
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协调服务。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
Dubbo
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。
在这里插入图片描述

3、搭建环境

Zookeeper

[root@localhost ~]# docker pull docker.io/zookeeper
[root@localhost ~]# docker run --name ZK01 -p 2181:2181 --restart always -d 4ebfb9474e72
2b423b6cf6f11d128cf8f2de66c46066982e7d255550573cd2bc6f85a804ec2f

Dubbo
在这里插入图片描述
依次创建项目,为了实现Dubbo中间件效果,创建两个Module,接下来我们会在Client端调用到Server端的方法。
在这里插入图片描述

4、实现Dubbo的RPC功能
<1>、配置服务端的Dubbo和Zookeeper依赖并注册地址

服务端导入Dubbo相关的依赖

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</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>

在application.properties对俩个模块连接进行配置

dubbo.application.name=provider-ticket

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

dubbo.scan.base-packages=com.example.ticket.service
<2>、使用@Service将服务发布出去
import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Controller;

@Controller
@Service    //将服务发布出去
public class TicketServiceImpl implements TicketService {

    @Override
    public String getTicket() {

        return "复仇者联盟四";
    }
}

按照上面写的地址将任务发布出去。

<3>、配置客户端的Dubbo和Zookeeper依赖并注册地址

导入Dubbo的相关依赖和Zookeeper客户端工具

        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

注册服务

dubbo.application.name=consumer-user

dubbo.registry.address=zookeeper://192.168.3.158:2181
<4>、服务端的接口复制到客户端

在这里插入图片描述
在这里插入图片描述
可以直接调用复制来的接口

import com.alibaba.dubbo.config.annotation.Reference;
import com.example.ticket.service.TicketService;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Reference
    TicketService ticketService;

    public void hello(){
        String ticket = ticketService.getTicket();
        System.out.println("-----"+ticket);
    }
}

编写一个测试类
注意一定要将服务端的程序一直启动

import com.example.user.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class ConsumerUserApplicationTests {

    @Autowired
    UserService userService;

    @Test
    public void contextLoads() {
        userService.hello();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值