参考乐字节的Dubbo教程

https://www.bilibili.com/video/BV19L4y1n7YE

Zookeeper单机部署 (Windows)

因为项目需要,这里我自己学习就采用Zookeeper作为注册中心

ZK的稳定版本镜像仓库

https://downloads.apache.org/zookeeper/stable/

下载后解压出来,拷贝一份zoo_sample.cfg重命名为zoo.cfg

配置信息:

主要是这三个信息需要根据自己需要变更

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=E:\\apache-zookeeper-3.7.0-bin\\data zk的数据输出目录
# the port at which the clients will connect
clientPort=2181 zk的默认客户端口2181 admin.serverPort=2180 这个是zk的服务端口配置,默认8080
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1 ## Metrics Providers
#
# https://prometheus.io Metrics Exporter
#metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
#metricsProvider.httpPort=7000
#metricsProvider.exportJvmInfo=true

然后双击cmd脚本启动

zkServer.cmd

Linux则是shell脚本,需要加上参数

zkServer.sh start

只要终端窗口没有 [ERROR]就表示ZK运行正常

Linux使用命令查看

zkServer.sh status

Demo工程结构:

新建一个Maven工程,把源代码目录删除后,配置Pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.cloud9</groupId>
<artifactId>Dubbo-Sample</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <!-- 管理的模块 -->
<modules>
<module>Common-API</module>
<module>Provider</module>
<module>Consumer</module>
</modules> <!-- 配置dubbo的版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<java.version>1.8</java.version>
<dubbo.version>2.0.0</dubbo.version>
</properties> <parent>
<!-- 指定Springboot版本 -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
</parent>
<!-- 管理依赖的版本,不是用来导入的 -->
<dependencyManagement>
<dependencies>
<!-- dubbo-starter 组件 -->
<dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency> <!-- dubbo使用zk作为注册中心需要的依赖组件 -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>2.7.8</version>
<type>pom</type>
</dependency> <!-- 上面zk组件没有客户端,还需要单独引入 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.9</version>
</dependency>
</dependencies>
</dependencyManagement> </project>

Common-API包

也是普通Maven项目

这个里面只需要提供公共的PO和调用接口即可

所有通用的依赖组件都在这个包里面引入

没有任何Spring的配置信息

商品PO类

package cn.cloud9.common.pojo;
import lombok.*;
import java.io.Serializable; @Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
public class Goods implements Serializable {
private String id;
private String name;
private Integer count;
}

调用的接口规范

package cn.cloud9.common.service;
import cn.cloud9.common.pojo.Goods;
import java.util.List; public interface ProviderService {
List<Goods> listEnableGoods();
}

common-api注入的依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Dubbo-Sample</artifactId>
<groupId>cn.cloud9</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>Common-API</artifactId> <properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>com.alibaba.spring.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<type>pom</type>
</dependency> <!-- https://blog.csdn.net/pri_sta_pub/article/details/79087592 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies> </project>

Provider 生产者服务

生产者将规定的接口进行实现

注意这里打注解,按照DEMO演示只需要打上Dubbo的@Service就可以了

实际情况可能Spring也会需要,因为生产者服务自己也可能是一个web服务

这里把完整资源名称写出来

package cn.cloud9.provider.service;

import cn.cloud9.common.service.ProviderService;
import cn.cloud9.common.pojo.Goods;
import java.util.ArrayList;
import java.util.List; @com.alibaba.dubbo.config.annotation.Service(interfaceClass = ProviderService.class)
@org.springframework.stereotype.Service
public class ProviderServiceImpl implements ProviderService { @Override
public List<Goods> listEnableGoods() {
List<Goods> goodsList = new ArrayList<>();
Goods goods = null;
for (int i = 0; i < 10; i++) {
goods = new Goods("GOODS-1001-ZXC-" + i, "GOODS-NAME-" + i, 10);
goodsList.add(goods);
}
return goodsList;
}
}

然后是启动类

除了Springboot启动类,还需要Dubbo配置注解

注意其他需要扫描的类,都需要和启动类同包内

package cn.cloud9.provider;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDubboConfiguration
@SpringBootApplication
public class ProviderApplication { public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}

生产者的dubbo配置信息:

server:
port: 8081 spring:
application:
name: dubbo-provider # 服务名称
dubbo: # dubbo配置
server: true
application:
name: provider # dubbo注册的名称
registry: # 注册中心地址和端口
address: zookeeper://localhost:2181
protocol: # 采用的协议和端口
name: dubbo
port: 20880
scan: cn.cloud9.provider.service # 扫描的资源地址

生产者引入的依赖只需要Common-API一个就满足了

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>Dubbo-Sample</artifactId>
<groupId>cn.cloud9</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion> <artifactId>Provider</artifactId> <properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties> <dependencies>
<dependency>
<groupId>cn.cloud9</groupId>
<artifactId>Common-API</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>

</dependencies>
</project>

Consumer 消费者服务

消费者和生产者一样都是只需要引入Common-API

消费只需要注入接口引用,调用即可

注意,需要使用Dubbo提供的@Reference注解注入

package cn.cloud9.consumer.controller;

import cn.cloud9.common.service.ProviderService;
import cn.cloud9.common.pojo.Goods;
import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController
@RequestMapping("/consume")
public class ConsumerController { @Reference(interfaceClass = ProviderService.class)
private ProviderService providerService;
/**
* /consume/goods
* @return
*/
@GetMapping("/goods")
public String getEnableGoodsList() {
final List<Goods> goodsList = providerService.listEnableGoods();
return goodsList.toString();
}
}

消费者的启动类和生产者一样,需要配置@DubboConfiguration

package cn.cloud9.consumer;

import com.alibaba.dubbo.spring.boot.annotation.EnableDubboConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableDubboConfiguration
@SpringBootApplication
public class ConsumerApplication { public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}

然后是消费者的配置信息,和生产者区分开来

1、服务不能和生产者一个端口号

2、服务名称

3、dubbo注册的服务名称

4、扫描的包

server:
port: 8083 spring:
application:
name: dubbo-consumer
dubbo:
server: true
application:
name: consumer
registry:
address: zookeeper://localhost:2181
protocol:
name: dubbo
port: 20880
scan: cn.cloud9.consumer

调用运行测试

上述步骤配置完成后

使用接口测试工具或者浏览器访问我们提供的web接口

localhost:8083/consume/goods

如果响应了数据,则调用正常

[Goods(id=GOODS-1001-ZXC-0, name=GOODS-NAME-0, count=10), Goods(id=GOODS-1001-ZXC-1, name=GOODS-NAME-1, count=10), Goods(id=GOODS-1001-ZXC-2, name=GOODS-NAME-2, count=10), Goods(id=GOODS-1001-ZXC-3, name=GOODS-NAME-3, count=10), Goods(id=GOODS-1001-ZXC-4, name=GOODS-NAME-4, count=10), Goods(id=GOODS-1001-ZXC-5, name=GOODS-NAME-5, count=10), Goods(id=GOODS-1001-ZXC-6, name=GOODS-NAME-6, count=10), Goods(id=GOODS-1001-ZXC-7, name=GOODS-NAME-7, count=10), Goods(id=GOODS-1001-ZXC-8, name=GOODS-NAME-8, count=10), Goods(id=GOODS-1001-ZXC-9, name=GOODS-NAME-9, count=10)]

使用Zookeeper Assistant 查看

可以发现这里放置的地址:

consumer://192.168.124.8/cn.cloud9.common.service.ProviderService?application=consumer
&category=consumers
&check=false&dubbo=2.6.0
&interface=cn.cloud9.common.service.ProviderService
&methods=listEnableGoods
&pid=27832
&side=consumer
&timestamp=1646562849952 dubbo://192.168.124.8:20880/cn.cloud9.common.service.ProviderService?anyhost=true
&application=provider
&dubbo=2.6.0
&generic=false
&interface=cn.cloud9.common.service.ProviderService
&methods=listEnableGoods
&pid=23608
&side=provider
&timestamp=1646562834480

实际业务案例场景:

订单服务, 商品服务 作为 【消息的生产者】

酒店端,小程序端, 商家端, 后台管理端,4个服务作为【消息的消费者】

API包,约束Dubbo要求的接口和PO序列化类

一、API包内容

本来应该Dubbo其它框架应该一起放在API里面,其它服务都只要引入API包就可以了

这里API包就是简单的组件

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>aisw-root</artifactId>
<groupId>cn.ymcd.aisw</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>aisw-api</artifactId>
<name>aisw-api</name>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.78</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

订单接口,和商品接口:

package cn.ymcd.aisw.service;

import cn.ymcd.aisw.service.dto.ECommodityDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; /**
* aisw_e_commodity 电竞酒店商品表 服务类
*
* @projectName:
* @author:daizhizhou
* @date:2022-03-14
* @version 1.0
*/
public interface IECommodityService extends IService<ECommodityDTO> { /**
* 电竞酒店商品翻页查询
*
* @param eCommodityDTO 商品参数
* @return
* @author wangkun
* @createTime 2022/3/7 14:51
*/
IPage<ECommodityDTO> eCommodityPageQuery(ECommodityDTO eCommodityDTO);
}

继承了MybatisPlus的IService接口,约定了处理的 PO序列化类

package cn.ymcd.aisw.service;

import cn.ymcd.aisw.service.dto.EOrderDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; /**
* TE_E_ORDER电竞酒店订单表服务类
*
* @version 1.0
* @projectName:aisw-api
* @author:wangkun
* @date:2022-03-07
*/
public interface IEOrderService extends IService<EOrderDTO> { /**
* 分页查询订单列表
*
* @param eOrderQueryReq 电竞酒店订单查询传入参数
* @return
* @author wangkun
* @createTime 2022/3/7 14:51
*/
IPage<EOrderDTO> queryEOrderList(EOrderDTO eOrderQueryReq);
}

对应的PO类只要求一点,必须序列化

@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("aisw_e_commodity")
public class ECommodityDTO extends BaseDTO implements Serializable { private static final long serialVersionUID = 1L; // 这里省略属性... ...
}

二、生产者服务配置:

API 包 + Dubbo框架 + ZK客户端

订单服务包和商品服务包都是这样的依赖信息

    <dependencies>
<dependency>
<groupId>cn.ymcd.aisw</groupId>
<artifactId>aisw-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--dubbo依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!-- zkclient客户端 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>

管理的框架版本在API根版本里面:

    <dependencyManagement>
<dependencies>
<!--dubbo rpc框架 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>
<!--zkclient客户端 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>

生产者实现API接口定义的规范

package cn.ymcd.aisw.ehotel;

import cn.ymcd.aisw.ehotel.dao.ECommodityDAO;
import cn.ymcd.aisw.service.IECommodityService;
import cn.ymcd.aisw.service.dto.ECommodityDTO;
import com.alibaba.dubbo.config.annotation.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; /**
* @projectName: aisw-root
* @author: cloud9
* @date: 2022年03月31日 11:02
* @version: 1.0
*/
@Service(version = "1.0.0")
public class EHotelCommodityServiceImpl extends ServiceImpl<ECommodityDAO, ECommodityDTO> implements IECommodityService {
@Override
public IPage<ECommodityDTO> eCommodityPageQuery(ECommodityDTO eCommodityDTO) {
QueryWrapper<ECommodityDTO> queryWrapper = Wrappers.query(eCommodityDTO);
return baseMapper.selectPage(eCommodityDTO.getPage(), queryWrapper);
}
}

启动类需要打上开启Dubbo的注解

package cn.ymcd.aisw;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement; /**
* 应用启动程序
* @return
* @author wangkun
* @createTime 2022/03/14 11:14
*/
@SpringBootApplication(scanBasePackages = "cn.ymcd", exclude = {DynamicDataSourceAutoConfiguration.class})
@EnableTransactionManagement
@EnableDubbo
public class AiswWxAppletBootApplication { public static void main(String[] args) {
SpringApplication.run(AiswWxAppletBootApplication.class, args);
}
}

然后是yml配置:

1、Dubbo注册的服务名称

2、Zookeeper的客户端端口,需要把服务信息放在Zookeeper上面,这里本机调试只开启一个ZK

3、服务上线时,需要向下面这样放集群ZK的信息

4、Dubbo协议,端口20881,端口只能一个生产者服务对应一个端口,不能共用端口

5、最重要的,你的接口实现类必须要被Dubbo找到,@Service注解是给Dubbo扫描的,SpringBoot不会接管这个Bean对象

所以需要在配置上写包扫描的位置,这样Dubbo才会去加载这个实现类

#[dubbo config]
#当前服务/应用的名字
dubbo:
application:
name: aisw-commodity-server
registry:
address: zookeeper://172.17.29.7:2181
# address: zookeeper://172.17.29.7:62001?backup=172.17.29.7:62002,172.17.29.7:62003,172.17.29.7:62004
protocol:
name: dubbo
port: 20881
scan:
base-packages: cn.ymcd.aisw

三、消费者服务配置

消费者也需要遵守共同的API规范,引入一样的组件:

        <dependency>
<groupId>cn.ymcd.aisw</groupId>
<artifactId>aisw-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--dubbo rpc框架 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<!--zkclient客户端 -->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
</dependency>

消费者的消息消费,接口实现是通过Dubbo代理完成的,同样的Springboot不接管这个接口Bean

package cn.ymcd.aisw.commodity.controller;

import cn.ymcd.aisw.service.IECommodityService;
import cn.ymcd.aisw.service.dto.ECommodityDTO;
import cn.ymcd.comm.base.BaseController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; /**
* @projectName: aisw-root
* @author: cloud9
* @date: 2022年03月15日 16:43
* @version: 1.0
*/
@RestController
@RequestMapping("${sys.path}/commodity")
public class ECommodityController extends BaseController { @Reference(version = "1.0.0")
private IECommodityService eCommodityService;
/**
* 电竞酒店商品
* sys/commodity/paging
* @param eCommodityDTO 电竞酒店订单查询传入参数
* @return
* @author wangkun
* @createTime 2020/12/4 11:35
*/
@ApiOperation(value = "电竞酒店商品列表", notes = "电竞酒店商品列表")
@PostMapping(value = "/paging")
public IPage<ECommodityDTO> queryECommodityPage(@RequestBody @ApiParam(name = "商品列表基本对象", value = "传入json格式", required = true) ECommodityDTO eCommodityDTO) { return eCommodityService.eCommodityPageQuery(eCommodityDTO);
} }

消费者启动类也需要开启Dubbo:

package cn.ymcd.aisw;

import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceAutoConfiguration;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement; /***
* 应用启动程序
* @return
* @author wangkun
* @createTime 2022/03/07 11:14
*/
@SpringBootApplication(scanBasePackages = "cn", exclude = {DynamicDataSourceAutoConfiguration.class})
@EnableTransactionManagement
@EnableDubbo
@MapperScan("cn.ymcd.aisw")
public class AiswEHotelBootApplication { public static void main(String[] args) {
SpringApplication.run(AiswEHotelBootApplication.class, args);
}
}

消费者服务的配置:

和生产者差不多,也需要把服务信息放到Zookeeper上,注解扫描

但是消费者不需要提供Dubbo协议和端口

#[dubbo config]
#dubbo服务名称
dubbo.application.name=aisw-eHotel
#注册中心地址
# dubbo.registry.address=zookeeper://192.168.200.25:2181
# dubbo.registry.address=zookeeper://172.17.29.7:62001?backup=172.17.29.7:62002,172.17.29.7:62003,172.17.29.7:62004
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.scan.base-packages=cn.ymcd.aisw

在调用的时候Debug可以看见接口的代理对象实例:

【Dubbo】构建SpringBoot整合Dubbo的Demo的更多相关文章

  1. Springboot整合Dubbo和Zookeeper

    Dubbo是一款由阿里巴巴开发的远程服务调用框架(RPC),其可以透明化的调用远程服务,就像调用本地服务一样简单.截至目前,Dubbo发布了基于Spring Boot构建的版本,版本号为0.2.0,这 ...

  2. springboot整合dubbo\zookeeper做注册中心

    springboot整合dubbo发布服务,zookeeper做注册中心.前期的安装zookeeper以及启动zookeeper集群就不说了. dubbo-admin-2.5.4.war:dubbo服 ...

  3. 【转】SpringBoot学习笔记(7) SpringBoot整合Dubbo(使用yml配置)

    http://blog.csdn.net/a67474506/article/details/61640548 Dubbo是什么东西我这里就不详细介绍了,自己可以去谷歌 SpringBoot整合Dub ...

  4. SpringBoot整合dubbo(yml格式配置)

    yml文件 如果只作为服务的消费者不用暴露端口号,扫描的包名根据自己service改 dubbo: application: name: springboot-dubbo-demo #应用名 regi ...

  5. dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级

    1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...

  6. Dubbo学习-6-springboot整合dubbo

    1.在前面帖子和工程的基础上,这里使用springboot整合dubbo,首先创建springboot项目: https://start.spring.io/  进入spring Initializr ...

  7. spring-boot整合dubbo启动demo

    参考资料: https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/html/ https://github.com/apach ...

  8. Dubbo与SpringBoot整合流程(从实例入手,附代码下载)

    场景 Dubbo环境搭建-管理控制台dubbo-admin实现服务监控: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10362 ...

  9. springboot整合dubbo+zookeeper最新详细

    引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...

  10. Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!   “看看星空,会觉得自己很渺小,可能我们在宇宙中从来就是一个偶然.所以,无论什么事情,仔细想一 ...

随机推荐

  1. REACT列表过度

    <TransitionGroup> <CSSTransition> <li>aaaa</li> </CSSTransition> </ ...

  2. Scrapy框架(二)--持久化存储

    持久化存储 scrapy的高性能持久化存储操作,有两种方式:基于终端指令的持久化存储 和 基于管道的持久化存储操作. 基于终端指令的持久化存储 保证爬虫文件的parse方法中有可迭代类型对象(通常为列 ...

  3. maven常用命令大全(附详细解释)

    1.常用打包命令 mvn clean package -Dmaven.test.skip=true -- 跳过单测打包mvn clean install -Dmaven.test.skip=true ...

  4. JS 中 == 和 === 区别是什么?

    a.对于string,number等基础类型,==和===有区别:不同类型间比较,==之比较"转化成同一类型后的值"看"值"是否相等,===如     果类型不 ...

  5. 消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计

    消息sms 邮箱/手机号/push发送的方案 & 定时任务xxlJob灵活度 & 泛型和发送的模板类设计 1.消息sms 邮箱/手机号/push发送的方案 1.判断收件人地址是否为空, ...

  6. 导出excel文件接口代码示例

    导出excel文件接口代码示例 1.该导出接口,token不能通过请求头来传输,需要在get请求的参数中带出来2.验证token的方法除了在拦截器中统一拦截,针对get接口传参数的方式也需要单独在接口 ...

  7. -bash: curl: command not found 卸载后重新安装

    -bash: curl: command not found rpm -e --nodeps curl yum remove curl rpm -qa|grep curl yum -y install ...

  8. 解决 Visual C++ 17.5 __cplusplus 始终为 199711L 的问题

    00. 软件环境 Visual Studio 2022, Visual C++, Version 17.5.4 01. 问题描述 在应用 https://github.com/ToniLipponen ...

  9. Win10任务栏图标居中

    win+q键搜索并打开字符映射表 点击第五行的空白字符,然后先后点击下方的选择以及复制 在桌面新建一个文件夹,然后重命名,将刚才复制的空白字符粘贴进去,如图,这样我们就拥有了一个空白名称的文件夹 在任 ...

  10. Android 自定义带动画的柱状图

    功能分析 假设要使用柱状图展示用户一周的数据,通用的做法是对接三方图表SDK或者自己通过代码绘制. 1.三方SDK通常包体较大,且定制性差,对特定的UI需求兼容性差; 2.自己绘制,比较复杂,而且要考 ...