Spring Boot 整合 Zookeeper和Dubbo 的详解

目录

1.Zookeeper 的作用

2.Dubbo 的作用

3.Springboot分布式之整合zookeeper和dubbo


1.Zookeeper 的作用

Zookeeper用来注册服务和进行负载均衡,哪一个服务由那一台机器来提供必需让调用者知道,简单来说就是IP地址和服务名称的对应关系。当然也可以通过硬编码的方式把这种对应关系在调用方业务代码中实现,但是如果提供服务的机器挂掉,调用者无法知晓,如果不更改代码会继续请求挂掉的机器提供服务。Zookeeper通过心跳机制可以检测挂掉的机器的IP和服务对应关系从列表关系中删除。至于支持高并发,简单来说就是横向扩展,在不更改代码的情况通过增加机器数量提高运算能力。通过添加新的机器向Zookeeper注册服务,服务的提供者多了能服务的客户就多了。

2.Dubbo 的作用

Dubbo是管理中间层的工具,在业务层到数据仓库间有非常多服务的接入和提供者需要调度,dubbo提供一个框架解决这些问题。注意这里的dubbo只是一个框架,至于你在框架上放什么东西,完全取决于你,就像一个汽车骨架,你需要配你的轮子引擎。这个框架中要完成调度必须需要一个分布式的注册中心,存储所有服务的元数据,你可以用Zookeeper,你也可以用别的。

两者关系:

Dubbo建议使用Zookeeper作为服务的注册中心,Dubbo作为RPC框架,主要解决远程调用问题。

 

3.Springboot分布式之整合zookeeper和dubbo

1、docker安装zookeeper

sudo docker pull zookeeper:3.4.11

sudo docker run --name zoopker01 -p 2181:2181 --restart always -d zookeeper:3.4.11

sudo docker ps -a

2、新建一个空项目,再分别新建两个module,一个是provider-ticket,一个是consumer-user

建好之后建立如下目录及文件:

 

 

(1) 首先分别将相关依赖导入到provider-ticket和consumer-user的pom.xml中

   <!--引入dubbo-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.1.0</version>
        </dependency>
        <!--引入zookeeper-->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

(2)配置相关信息

在provider-ticker中application.properties

#提供者名称
dubbo.application.name=provider-ticket
#注册中心地址
dubbo.registry.address=zookeeper://192.168.124.22:2181
#将哪个包的服务发送出去
dubbo.scan.base-packages=com.gong.com.gong.providerticket.service

在consumer-user中application.properties

dubbo.application.name=consumer-user
dubbo.registry.address=zookeeper://192.168.124.22:2181

(3)在provider-ticker中的com.gong.providerticjet下的service.TicketService

package com.gong.providerticket.service;

public interface TicketService {
    public String getTicket();
}
service.TicketServiceImpl

package com.gong.providerticket.service;

import com.alibaba.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

@Component
@Service
public class TicketServieImpl implements TicketService {

    @Override
    public String getTicket() {
        return "囧妈";
    }
}

这里的@Service注解注意是dubbo包里面的。

在provider-ticket主入口加上EnableDubbo注解。

然后我们将com.gong.providerticket.service.TicketService拷贝一份到consumer-user下,注意包名要对应。

接着就可以进行测试了:

UserService.java

package com.gong.consumeruser.service;

import com.alibaba.dubbo.config.annotation.Reference;
import com.gong.providerticket.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);
    }
}

这里的@Service是springboot中的。

最后是在ConsumerUserApplicationTests.java

package com.gong.consumeruser;

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

}

3、进行测试

首先运行provider-ticket项目。然后再运行ConsumerUserApplicationTests.java中的contextLoads方法:

 

在consumer-user中成功调用了provider-ticket中的TicketServiceImpl.java中的方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值