前言: 本文将使用springboot+dubbo+zookeeper+maven搭建一套微服务。
需要提前在本地配置的环境:

  • maven环境
  • zookeeper环境(在我本地zookeeper在2181端口)
  • jdk……
完成的项目下载地址

完成项目下载地址

第一步 新建一个多模块项目(用户模块user-module)
  • 项目结构
user-module user-app user-service-api
用户模块(父目录) 用户对外api子模块 程序内部调用的用户api模块(jar)

注意: 其中 user-module父模块 和 user-service-api 自模块 不需要对外提供访问,所以不需要提供启动类,也不需要web和相关的依赖。 只有对外提供访问的 user-app才需要各种maven类,包括 web 、dubbo等。

user-service-api模块

说明: 这个模块的 配置文件等都是空的,也基本没有相关的maven依赖。对外本程序提供api。

注意: 本模块的输出类:即vo文件夹下的实体类,例如: UserVo.java。一定要实现: Serializable序列化接口,另外这个类是和 user-app 中的实体类 User.java一模一样的。(只是名字不一样,UserVo实现了序列化接口,仅此而已,其他都一样)

  • pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itzhongzi</groupId><artifactId>user-service-api</artifactId><version>0.0.1-SNAPSHOT</version><name>user-service-api</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build></build></project>
  • IUserService.java 接口类
package com.itzhongzi.userserviceapi.service;import com.itzhongzi.userserviceapi.vo.UserVo;/*** @description:* @author: lihongwei* @time: 2020/1/8 2:18 下午*/
public interface IUserService {public UserVo getUserById(Integer id);
}
  • UserVo.java 实体类( 除了名字和实现了序列化接口外和 user-app中的User实体类必须一模一样)
package com.itzhongzi.userserviceapi.vo;import java.io.Serializable;/*** @description:* @author: lihongwei* @time: 2020/1/8 2:19 下午*/
public class UserVo implements Serializable {private int age;private String name;private String sex;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User{" +"age=" + age +", name='" + name + '\'' +", sex='" + sex + '\'' +'}';}
}
user-app模块
  • maven配置 pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itzhongzi</groupId><artifactId>user-app</artifactId><version>0.0.1-SNAPSHOT</version><name>user-app</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.itzhongzi</groupId><artifactId>user-service-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!--数据库连接池工具--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.1</version></dependency><!--mysql 连接工具--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version><optional>true</optional></dependency><!--mybatis 逆向生成实体类工具--><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><scope>test</scope><version>1.3.2</version><optional>true</optional></dependency><!--apache 提供的常用工具包--><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.1</version></dependency><!--mybatis starter--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 新增 dubbo 依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.2</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!--zookeeper java连接工具--><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><!--zookeeper 布丁工具包--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.0.1</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
  • log4j.properties配置(dubbo内部需要使用这个配置)
project=dubbo
logdir=../logs/${project}### set log levels ###
log4j.rootLogger = info,stdout,console
# config this project appender,log level:info,error #
log4j.logger.com.ts.report = info,error,bizInfo,bizErrorlog4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n## \u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File=${logdir}/all.log
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.DatePattern='_'yyyy-MM-dd
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n# info log everyday file#
log4j.loger.bizInfo = info,bizInfo
log4j.appender.bizInfo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.bizInfo.File=${logdir}/info.log
log4j.appender.bizInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.bizInfo.DatePattern='_'yyyy-MM-dd
log4j.appender.bizInfo.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.bizInfo.Threshold=INFO
#log4j.additivity.bizInfo=false##  error log ##
log4j.loger.bizError = info,bizError
log4j.appender.bizError = org.apache.log4j.DailyRollingFileAppender
log4j.appender.bizError.File = ${logdir}/error.log
log4j.appender.bizError.layout = org.apache.log4j.PatternLayout
log4j.appender.bizError.DatePattern='_'yyyy-MM-dd
log4j.appender.bizError.layout.ConversionPattern =%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.bizError.Threshold = ERROR
#log4j.additivity.error=false##  error log ##
log4j.loger.error = info,error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = ${logdir}/sys_error.log
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.DatePattern='_'yyyy-MM-dd
log4j.appender.error.layout.ConversionPattern =%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.error.Threshold = ERROR
#log4j.additivity.error=false
  • application.yml 该模块的配置文件
server:port: 8086# dubbo 配置
dubbo:application:name: user-app# 使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper# 注册中心idregistry:id: zookeeper-registry# 注册中心协议protocol: zookeeper# 注册中心地址address: 127.0.0.1:2181# dubbo协议在20880端口暴露服务# 协议名称protocol:name: dubbo# 协议端口 对外提供访问的端口port: 20880# 协议访问logaccesslog: dubbo-access.log# 重试次数provider:#重试次数retries: 0# 超时时间timeout: 3000# 注册监控中心monitor:protocol: registryconfig-center:protocol: zookeeperaddress: 127.0.0.1:2181
  • UserAppApplication.java 启动类
package com.itzhongzi.userapp;import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubboConfig
@DubboComponentScan("com.itzhongzi.userapp.service.dubbo")
@SpringBootApplication
public class UserAppApplication {public static void main(String[] args) {SpringApplication.run(UserAppApplication.class, args);}}
  • UserController.java controller
package com.itzhongzi.userapp.controller;import com.itzhongzi.userapp.service.dubbo.UserService;
import com.itzhongzi.userserviceapi.vo.UserVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** @description:* @author: lihongwei* @time: 2020/1/8 2:28 下午*/
@RestController
public class UserController {@Resourceprivate UserService userService;@RequestMapping("/get_user")public UserVo getUserById(Integer id){UserVo getUser = userService.getUserById(id);return getUser;}
}
  • User.java 实体类
package com.itzhongzi.userapp.domain;/*** @description:* @author: lihongwei* @time: 2020/1/8 2:15 下午*/
public class User {private int age;private String name;private String sex;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}@Overridepublic String toString() {return "User{" +"age=" + age +", name='" + name + '\'' +", sex='" + sex + '\'' +'}';}
}
  • UserService.java 服务类 对外暴露的api接口

注意: 这个类 实现了 另一个自定义模块 user-service-api中的接口,初次引入会报错,等把另一个项目 user-service-api建好,并引入项目之后便不会报错。

package com.itzhongzi.userapp.service.dubbo;import com.itzhongzi.userserviceapi.service.IUserService;
import com.itzhongzi.userserviceapi.vo.UserVo;
import org.apache.dubbo.config.annotation.Service;/*** @description:* @author: lihongwei* @time: 2020/1/8 2:20 下午*/
@Service
public class UserService implements IUserService{@Overridepublic UserVo getUserById(Integer id) {UserVo user = null;if(id == null || id == 0) {user = new UserVo();user.setName("new 李洪伟");user.setAge(18);user.setSex("男");}//去查询数据库 假装查到了数据user = new UserVo();user.setName("数据库 李洪伟");user.setAge(id);user.setSex("数据库 男");return user;}
}

注意: 要想用 UserService去继承 IUserService,一定要在 user-app中引入 user-service-api模块,如下图:

 <!--引入本项目中的另一个模块 user-service-api--><dependency><groupId>com.itzhongzi</groupId><artifactId>user-service-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency>
coupon-module优惠券模块

优惠券模块本质上就是把 user-module拷贝一份,然后 修改几个一下几个地方

  • 各个pom.xml文件
  • 修改 package的报名
  • 修改类的入口
  • 把不需要的类给删除
    如果不知道怎么修改,就从头创建一个多么快的项目,效果是一样的。
  • 项目结构
coupon-module coupon-app coupon-service-api
优惠券模块(父目录) 优惠券对外api子模块 程序内部调用的优惠券api模块(jar)
coupon-service-api 模块

user-service-api 模块 基本所有的内容都是空的,象征醒的剪了一个模块。maven配置如下

  • pom.xml maven配置
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itzhongzi</groupId><artifactId>coupon-service-api</artifactId><version>0.0.1-SNAPSHOT</version><name>coupon-service-api</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency></dependencies><build></build></project>
coupon-app 模块
  • pom.xml maven配置

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.2.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.itzhongzi</groupId><artifactId>coupon-app</artifactId><version>0.0.1-SNAPSHOT</version><name>coupon-app</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--引入本项目中的另一个模块 coupon-service-api--><dependency><groupId>com.itzhongzi</groupId><artifactId>coupon-service-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- 新增 dubbo 依赖 --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>2.7.2</version><exclusions><exclusion><artifactId>spring</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency><dependency><groupId>org.apache.zookeeper</groupId><artifactId>zookeeper</artifactId><version>3.4.10</version><exclusions><exclusion><artifactId>slf4j-log4j12</artifactId><groupId>org.slf4j</groupId></exclusion></exclusions></dependency><!--zookeeper java连接工具--><dependency><groupId>com.github.sgroschupf</groupId><artifactId>zkclient</artifactId><version>0.1</version></dependency><!--zookeeper 布丁工具包--><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>4.0.1</version></dependency><!--  重要 引入 user-module 用户模块的jar包  --><dependency><groupId>com.itzhongzi</groupId><artifactId>user-service-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
  • log4j.properties 日志配置
project=dubbo
logdir=../logs/${project}### set log levels ###
log4j.rootLogger = info,stdout,console
# config this project appender,log level:info,error #
log4j.logger.com.ts.report = info,error,bizInfo,bizErrorlog4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n## \u8F93\u51FA\u5230\u63A7\u5236\u53F0 ###
log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File=${logdir}/all.log
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.DatePattern='_'yyyy-MM-dd
log4j.appender.stdout.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n# info log everyday file#
log4j.loger.bizInfo = info,bizInfo
log4j.appender.bizInfo=org.apache.log4j.DailyRollingFileAppender
log4j.appender.bizInfo.File=${logdir}/info.log
log4j.appender.bizInfo.layout=org.apache.log4j.PatternLayout
log4j.appender.bizInfo.DatePattern='_'yyyy-MM-dd
log4j.appender.bizInfo.layout.ConversionPattern=%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.bizInfo.Threshold=INFO
#log4j.additivity.bizInfo=false##  error log ##
log4j.loger.bizError = info,bizError
log4j.appender.bizError = org.apache.log4j.DailyRollingFileAppender
log4j.appender.bizError.File = ${logdir}/error.log
log4j.appender.bizError.layout = org.apache.log4j.PatternLayout
log4j.appender.bizError.DatePattern='_'yyyy-MM-dd
log4j.appender.bizError.layout.ConversionPattern =%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.bizError.Threshold = ERROR
#log4j.additivity.error=false##  error log ##
log4j.loger.error = info,error
log4j.appender.error = org.apache.log4j.DailyRollingFileAppender
log4j.appender.error.File = ${logdir}/sys_error.log
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.DatePattern='_'yyyy-MM-dd
log4j.appender.error.layout.ConversionPattern =%d{yyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L - %m%n
log4j.appender.error.Threshold = ERROR
#log4j.additivity.error=false
  • application.yml
server:port: 8088# dubbo 配置
dubbo:application:name: user-appqosEnable: trueqosPort: 33333qosAcceptForeignIp: false# 使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper# 注册中心idregistry:id: zookeeper-registry# 注册中心协议protocol: zookeeper# 注册中心地址address: 127.0.0.1:2181# dubbo协议在20880端口暴露服务# 协议名称protocol:name: dubbo# 协议端口 对外提供访问的端口port: 20881# 协议访问logaccesslog: dubbo-access.log# 重试次数provider:#重试次数retries: 0# 超时时间timeout: 3000# 注册监控中心monitor:protocol: registryconfig-center:protocol: zookeeperaddress: 127.0.0.1:2181

注意 多个 dubbo项目部署在同一个电脑上时,dubbo对外访问的端口不要相同,否则会报 端口占用的错误。

  • CouponAppApplication.java 入口文件

注意: 入口类开启 dubbo时,使用 @DubboComponentScan("com.itzhongzi.userapp.service.dubbo")中的包名,是user-module模块中对外提供的service报名。

package com.itzhongzi.couponapp;import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@EnableDubboConfig
@DubboComponentScan("com.itzhongzi.userapp.service.dubbo")
@SpringBootApplication
public class CouponAppApplication {public static void main(String[] args) {SpringApplication.run(CouponAppApplication.class, args);}}
  • CouponService.java 优惠券服务类
  • 在这里面调用远程接口
  • 远程类自动注入要用@Reference
  • IUserService为 user-module模块的服务类

package com.itzhongzi.couponapp.service;import com.itzhongzi.userserviceapi.service.IUserService;
import com.itzhongzi.userserviceapi.vo.UserVo;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;/*** @description:* @author: lihongwei* @time: 2020/1/8 4:06 下午*/
@Service
public class CouponService {@Referenceprivate IUserService iUserService;public UserVo getCouponUser(Integer id){return iUserService.getUserById(id);}
}
  • TestController.java 测试类
package com.itzhongzi.couponapp.controller;import com.itzhongzi.couponapp.service.CouponService;
import com.itzhongzi.userserviceapi.vo.UserVo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** @description:* @author: lihongwei* @time: 2020/1/8 4:08 下午*/
@RestController
public class TestController {@Resourceprivate CouponService couponService;@RequestMapping("coupon_user")public UserVo getUser(Integer id){return couponService.getCouponUser(id);}}
测试

我们把两个项目都启动,user-module在8086端口,coupon-module在8088端口。

我们去请求 8088 端口coupon-mudule开放的api,看看能不能 调用user-module的模块。

如图所示,请求成功。

这样我们springboot+dubbo+zookeeper搭建的微服务框架就搭建完毕了。后续可以自己加入数据库等各种配置。

谢谢观看。

springboot+dubbo+zookeeper+maven搭建微服务详细教程相关推荐

  1. 基于go搭建微服务实践教程 (概览)

    原文:Go Microservices blog 翻译:秦伟格 转载请注明原文及翻译. 译者按:公司转向重新做一套支付系统,并打算用golang的微服务来实现.于是上网上找一找教程,发现中文教程都不是 ...

  2. docker 搭建 web_《SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用》

    为什么要使用分布式系统? 容错 减少延迟/提高性能 可用性 负载均衡 总而言之,其实目的只有一个,"用户体验". 什么是分布式系统? 分布式系统是由使用分发中间件连接的自治计算机组 ...

  3. 《SpringBoot+Dubbo+Zookeeper整合搭建简单的分布式应用》

    为什么要使用分布式系统? 容错 减少延迟/提高性能 可用性 负载均衡 总而言之,其实目的只有一个,"用户体验". 什么是分布式系统? 分布式系统是由使用分发中间件连接的自治计算机组 ...

  4. SpringBoot + Dubbo + Zookeeper搭建一个简单的分布式服务

    本文使用SpringBoot + Dubbo + Zookeeper 来搭建一个简单的分布式服务 文章目录 dubbo-spring-boot-starter 如何发布 Dubbo 服务 如何消费 D ...

  5. springboot+dubbo+zookeeper详细搭建

    springboot+dubbo+zookeeper框架搭建 环境搭建 启动zookeeper 启动dubbo-addmin-2.6.0监控平台(可省) 服务提供者 引包 配置参数 启动类 demo ...

  6. spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo SpringBoot + Dubbo + zookeeper Spring Security

    spring-boot重头再来 6 文章目录 spring-boot重头再来 6 分布式理论 RPC远程过程调用 Zookeeper安装 Dubbo dubbo-admin安装 dubbo-admin ...

  7. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行,系统与系统之间通过RPC接口通信.这样这些系统之间的耦合度大大降低,你的系统将非常容易扩展 ...

  8. 零基础搭建微服务框架/Spring Boot + Dubbo + Docker + Jenkins

    本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 项目完整源码下载 https://github ...

  9. Spring Boot如何在最短时间里快速搭建微服务框架,详细教程贡上

    前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...

最新文章

  1. 源文件封装为IP的步骤
  2. Windows server下部署php环境
  3. c语言指针数组 难点总结,C语言之指针与数组总结
  4. dev chartcontrol获取x y轴的值_终于,奔驰强势接手了腾势X
  5. ITK:创建文件名列表
  6. JS面向对象--你真的理解闭包了吗?
  7. 【Boost】boost库中thread多线程详解10——condition条件变量
  8. js抽奖概率随机取出数据(简单示例)
  9. 14.并发容器之ConcurrentHashMap(JDK 1.8版本)
  10. python如何生成一系列浮点数(含例子)
  11. 最全面的理解 | 工业互联网的前世今生
  12. “代理XP”组件已作为此服务器安全配置的一部分被关闭
  13. C++ 多线程系统编程精要
  14. ADB登录验证暴力破解工具
  15. 在火狐浏览器里怎么看请求头
  16. 云炬随笔集(2016.7~2022.1)
  17. n一加关闭小部件_小部件
  18. 搭建智慧农业物联网云平台——基于阿里云物联网平台构建
  19. dirver时区_【作业】偶入卡地亚Driver de Cartier双时区大日历腕表|腕表之家xbiao.com...
  20. 番茄钟怎么调_实操番茄钟使用方法

热门文章

  1. git操作遇见fatal: Exiting because of unfinished merge.错误
  2. 点击li,ul滚动条自动滚动到顶部,怎么解决分享。el-tooltip的focusing不要display:none,隐藏就行
  3. centos,linux系统安装
  4. 获取Android UI中的text内容
  5. python中的字符串文本必须用什么括起来_懒人学Python-边学边练-字符串篇
  6. 【解决】通用串行总线控制器全是感叹号
  7. 论文阅读_深度学习的医疗异常检测综述
  8. Cacti设置--添加监控主机
  9. 又在放大招!这个 Github 项目针对 Python 初学者!
  10. 奔梦向前-代码实现桌球游戏网页版-2020-04-26