SpringBoot使用Dubbo及Zookeeper的基础实例(超简单!!!)

简介

Dubbo是一阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC(所谓的RPC指的是远程调用,就像调用本地方法一样调用另外项目中的代码) 实现服务的输出和输入功能,可以和 Spring框架无缝集成。更详细的可以去https://blog.csdn.net/qq_43222167/article/details/107048655

在学习dubbo之前必须明白几个概念

服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer): 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心

他们之间的关系是:

服务容器负责启动,加载,运行服务提供者。
服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者在启动时,向注册中心订阅自己所需的服务。
注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。


zookeeper的下载安装:https://blog.csdn.net/qq_43222167/article/details/106096290

创建项目

在这里插入图片描述
这里是将服务接口,也就是我们常说的service层创建一个单独的项目方便调用,也就是dubbo-service

dubbo-provider:服务的提供者
dubbo-consumer:服务的消费者

dubbo-service中只有一个很简单的接口

在这里插入图片描述

package com.jbit.service;

public interface HelloDubboService {
    public String print();
}

然后就是总项目的pom.xml文件!!!这里尤其要注意jar包依赖,有需要的可以看:https://blog.csdn.net/qq_43222167/article/details/107048857

父依赖

 <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.2.4.RELEASE</version>
</parent>

dependencies

<dependencies>

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
		<!--项目dubbo-service的依赖-->
        <dependency>
            <groupId>com.jbit.dubbo</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <!--引入dubbo的依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>logback-classic</artifactId>
                    <groupId>ch.qos.logback</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j-over-slf4j</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- 引入zookeeper的依赖 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
            <exclusions>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

dubbo-service的依赖根据自己的改


接下来是dubbo-provider

dubbo-provider

HelloDubboService的实现HelloDubboServiceImpl

package com.jbit.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.jbit.service.HelloDubboService;

@Service(version = "1.0.0",interfaceClass = HelloDubboService.class)
public class HelloDubboServiceImpl implements HelloDubboService {

    public String print() {
        return "-------hello Dubbo-------";
    }
}

这里尤其是注意@Service注解是dubbo下面的

启动类

package com.jbit;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class,args);
    }
}

application.yml

server:
  port: 8081

dubbo:
  application:
    name: dubbo-provider
  registry:
    protocol: zookeeper
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880
  scan: com.jbit.service.impl.HelloDubboServiceImpl

如果想要暴露多个接口,使得逗号拼接即可,例
在这里插入图片描述
注意空格的对齐及自己dubbo的端口号,也就是
在这里插入图片描述

dubbo-consumer

配置大致差不多,因为服务提供者已经暴露出接口了,所以我们不需要再写,只需要写相应的控制层调用即可
DubboController
这里要注意@Reference注解也是dubbo的

package com.jbit.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jbit.service.HelloDubboService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.io.Serializable;

@RestController
@RequestMapping("dubbo")
public class DubboController {

    @Reference(version = "1.0.0")
    private HelloDubboService helloDubboService;

    @RequestMapping("print")
    public String print() {
     	System.out.println(helloDubboService);
        return helloDubboService.print();
    }
}

启动类DubboConsumerApplication

package com.jbit;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(DubboConsumerApplication.class,args);
    }
}

application.yml

server:
  port: 8082

dubbo:
  application:
    name: dubbo-consumer
  registry:
    protocol: zookeeper
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20881

测试

先启动zookeeper,再启动服务提供者,也就是dubbo-provider,等待加载完后启动dubbo-consumer,访问http://localhost:8082/dubbo/print (如果自己改变了就调用自己相应的)
在这里插入图片描述
可以看到已经成功!!!

大致流程

这里的大致流程就是服务的提供者启动后将自己的服务注册到zookeeper中,然后消费者启动的时候需要使用什么服务就到zookeeper中取着使用

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值