springboot整合dubbo

七脉      2022-04-30     772

关键词:

SpringBoot整合Dubbo

一、Dubbo

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

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

  关键点介绍:

  1.注册与发现  

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

  2.负载均衡

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

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

  3.容错机制

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

  4.Dubbo协议

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

    dubbo:

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

    hessian:

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

  5.Dubbo容器

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

  6.监控中心

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

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

 

二、Zookeeper

   集群安装教程:https://www.cnblogs.com/zwcry/p/10272506.html

三、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

 

 

  

springboot和dubbo整合

创建3个项目dubbo-api新建一个maven项目,这个项目只有接口(或实体类)dubbo-service和dubbo-web这两个依赖于dubbo-api<groupId>com.zhang</groupId><artifactId>dubbo-api</artifactId><version>1.0</version>& 查看详情

springboot与dubbo整合

1.添加依赖 <!--SpringBootDubbo依赖--> <dependency> <groupId>io.dubbo.springboot</groupId> <artifactId>spring-boot-starter-dubbo</artifactId> <version>$dubbo 查看详情

dubbo入门学习-----dubbo整合springboot(代码片段)

springboot节省了大量的精力去配置各种bean,因此通过一个简单的demo来整合springboot与dubbo一、创建boot-user-service-provider本篇博文基于上篇中的dubbo项目,整体工程如下:1、pom.xml<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven... 查看详情

dubbo整合springboot

目前的dubbo已支持和springboot集成,还是之前的例子,这次我们通过springboot容器来实现。借此了解一下基于springboot容器启动的dubbo的配置及使用。1.准备工作创建一个Maven空项目,作为项目的父工程,此工程的子项目基于SpringBoot2.0... 查看详情

springboot整合dubbo

一、导入依赖  二、生产者provider  (1)目录展示        (2)配置文件application.properties        (3)DoSomeService接口     packagecom.zn.service;publicinterfaceDoSomeService{publicStringsayHi();}  (4)DoSomeService... 查看详情

dubbo与springboot的三种整合方式

SpringBoot与dubbo整合的三种方式:1、导入dubbo-starter,在application.properties配置属性,使用@Service暴露服务,使用@Reference引用服务,使用@EnableDubbo开启dubbo注解(或者在application.properties中配置dubbo.scan.base-packages=com.lina02.gmall)2、保留 查看详情

springboot整合dubbo案例(代码片段)

使用框架:jdk1.8springboot-2.1.3dubbo-2.6spring-data-jpa-2.1.5一、开发dubbo服务接口:按照Dubbo官方开发建议,创建一个接口项目,该项目只定义接口和model类;1、创建springboot工程spring-boot-demo-dubbo-interface坐标:<groupId>com.example</groupI... 查看详情

springboot整合dubbo

 Dubbo是阿里开源的一个微服务框架,性能很高,现在由Apache维护。 Dubbo的架构:http://dubbo.apache.org/zh-cn/docs/user/preface/architecture.html 此处写一个demo,订单服务获取订单所属用户的信息,order-service调用user-service。 &nbs... 查看详情

springboot整合dubbo和zookeeper

...就像调用本地服务一样简单。截至目前,Dubbo发布了基于SpringBoot构建的版本,版本号为0.2.0,这使得其与SpringBoot项目整合变得更为简单方便。而Zookeeper在这里充当的是服务注册中心的角色,我们将各个微服务提供的服务通过Dubbo... 查看详情

springboot整合dubbo

通过三个工程演示整合过程工程一:API工程:服务端与客户端共同需要引入的工程  pom:无特殊依赖,下边内容供服务端与客户端引用此工程使用<groupId>com.boot.dubbo.demo</groupId><artifactId>dubbo-api</artifactId><v... 查看详情

dubbo学习springboot整合dubbomybatismysql

dubbo-admin查看服务和服务提供方配置 服务消费方配置和web整合相对复杂一些,常出现的问题是Controller中有@Reference配置的属性 没注入进来而调用时报null异常   查看详情

springboot整合dubbo(yml格式配置)

yml文件如果只作为服务的消费者不用暴露端口号,扫描的包名根据自己service改dubbo:application:name:springboot-dubbo-demo#应用名registry:address:zookeeper://127.0.0.1:2181#zookeeper地址#port:2181#提供注册的端口protocol:name:dubboport:"20889"#dubbo服 查看详情

springboot整合dubbo

导入依赖  生产者provider目录  接口IDoSomeService 实现类 IDoSomeServiceImpl  配置文件application.properties  测试类DubboProvider消费者consumer目录  接口类IDoSomeService&n 查看详情

dubbo学习——springboot整合dubbo(代码片段)

...中获取到所有的提供者/消费者进行配置管理。Dubboadminisaspringbootapplicat 查看详情

dubbo学习——springboot整合dubbo(代码片段)

...中获取到所有的提供者/消费者进行配置管理。Dubboadminisaspringbootapplicat 查看详情

一springboot整合dubbo光速入门

0、docker启动zkdocker-compose.ymlversion:'3'services:zoo1:image:zookeeperrestart:alwayshostname:zoo1ports:-2181:2181docker-composeup-d1、创建父pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns= 查看详情

springboot与dubbo整合的三种方式

...服务,使用@Reference来引用服务。具体可参考 Dubbo整合SpringBoot,这里截取部分代码方便理解。属性在application.properties中配置服务提供方使用@Service注 查看详情

springboot整合dubbo

生产者  结构        导入依赖    <dependency><groupId>com.101tec</groupId><artifactId>zkclient</artifactId><version>0.10</version></dependency><dependency>& 查看详情