springboot整合dubbo

SpringBoot整合Dubbo

1、Dubbo

     Dubbo是一款高性能、轻量级的开源Java RPC框架,html

  它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。  java

  关键点介绍:web

  1.注册与发现  算法

    Dubbo使用zookeeper作服务的注册中心,就是服务的提供者以临时节点的形式将服务Server信息注册保存到Zookeeper的dubbo目录下的provider的节点下,供消费者发现调用。spring

  2.负载均衡api

    Dubbo支持负载均衡策略,就是同一个Dubbo服务被多台服务器启用后,会在在Zookeeper提供者节点下显示多个相同接口名称节点。springboot

    消费者在调用Dubbo负载均衡服务时,采用权重的算法策略选择具体某个服务器上的服务,权重策略以*2倍数设置。服务器

  3.容错机制并发

    Dubbo的提供者在Zookeeper上使用的是临时节点,一旦提供者所在服务挂掉,该节点的客服端链接将会关闭,故节点自动消失。因此消费者调用接口时将不会轮询到已经挂掉的接口上(延迟例外)。app

  4.Dubbo协议

    Dubbo经常使用协议有两种:dubo、hessian

    dubbo:

      Dubbo 缺省协议是dubbo协议,采用单一长链接和 NIO 异步通信,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的状况。

    hessian:

      Hessian底层采用Http通信(同步),采用Servlet暴露服务。适用于传入传出参数数据包较大,消费者并发量少,提供者较多,可传文件。

  5.Dubbo容器

    Dubbo在java jvm中有本身的容器,和Spring IOC的bean同样,将服务对象保存到本身的容器中。

  6.监控中心

    监控中心主要是用来服务监控和服务治理。

    服务治理包含:负载均衡策略、服务状态、容错、路由规则限定、服务降级等。具体能够下载Dubbo监控中心客户端查看与设置。

 

2、Zookeeper

   集群安装教程:http://www.javashuo.com/article/p-cbooxgmm-dt.html

3、SpringBoot整合Dubbo

  整合前要明白Dubbo RPC远程过程调用服务的格调,是采用API接口形式调用。

  故分为:服务接口Project、提供者Project、消费者Project 三大块。服务接口Project用来定义接口API,提供者Project用来实现API接口并对外暴露接口,消费者使用服务接口API调用提供者对外暴露的服务。

  1.pom.xml依赖

 <!-- dubbo依赖 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba.spring.boot/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.101tec/zkclient -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

  2.定义服务接口Project的接口类

package com.qy.dubbo.server.api; public interface DubboUserServer { /** * @author 七脉 * 描述:获取用户 * @param id * @return
     */ String getUser(Long id); }

  3.提供者Project

    (1)服务实现暴露类

package com.qy.dubbo.server.service; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Service; import com.qy.dubbo.server.api.DubboUserServer; @Service(interfaceClass=DubboUserServer.class) @Component public class DubboUserServerImpl implements DubboUserServer { @Override public String getUser(Long id) { String name = ""; if(1==id){ name = "董志峰"; }else if(2==id){ name = "刘亦菲"; }else{ name = "杨幂"; } return name+"8082"; } }

    (2)启动类 

package com.qy.dubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; @EnableDubboConfiguration @SpringBootApplication public class DubboServerApplication { public static void main(String[] args) { System.setProperty("dubbo.application.logger", "slf4j"); SpringApplication.run(DubboServerApplication.class, args); } }

    (3)application.properties

server.port=8081
  
## dubbo springboot 配置
spring.dubbo.application.id=dubbo-server-provider
spring.dubbo.application.name=dubbo-server-provider
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=192.168.159.129:2181,192.168.159.129:2182,192.168.159.129:2183
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=2${server.port}

  4.消费者

    (1)服务客户端

package com.qy.dubbo.client; import org.springframework.stereotype.Component; import com.alibaba.dubbo.config.annotation.Reference; import com.qy.dubbo.server.api.DubboUserServer; @Component public class DubboUserCient { @Reference(check=false) private DubboUserServer dubboUserServer; public String getUser(Long id){ return dubboUserServer.getUser(id); } }

    (2)启动类

package com.qy.dubbo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration; import com.qy.dubbo.client.DubboUserCient; @RestController @EnableDubboConfiguration @SpringBootApplication public class DubboClientApplication { @Autowired private DubboUserCient dubboUserCient; public static void main(String[] args) { System.setProperty("dubbo.application.logger", "slf4j"); SpringApplication.run(DubboClientApplication.class, args); } @GetMapping("/getuser") public String getUser(){ return dubboUserCient.getUser(1L); } }

    (3)application.properties

server.port=8088
  
## dubbo springboot 配置
spring.dubbo.application.id=dubbo-server-consumer
spring.dubbo.application.name=dubbo-server-consumer
spring.dubbo.registry.protocol=zookeeper
spring.dubbo.registry.address=192.168.159.129:2181,192.168.159.129:2182,192.168.159.129:2183
spring.dubbo.server=true
spring.dubbo.protocol.name=dubbo
spring.dubbo.protocol.port=2${server.port}

  5.测试

  

源码

连接:https://pan.baidu.com/s/1uLCjpKQ3SIpOngQWznr6lw
提取码:6knl

相关文章
相关标签/搜索