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

    技术2022-07-10  212

    简介

    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中取着使用

    Processed: 0.022, SQL: 9