文章目录

  • 1. Dubbo快速入门代码编写
    • 1.1 需求分析
    • 1.2 项目和模块创建
    • 1.3 导入相关依赖
    • 1.4 编写提供服务的接口
    • 1.5 编写调用服务的程序
    • 1.6 安装dubbo-service(被依赖的模块需要安装)
    • 1.7 配置Tomcat
    • 1.8 启动测试
    • 1.9 说明
    • 1.10 改造dubbo-service:服务提供者
    • 1.11 改造dubbo-web:服务消费者
    • 1.12访问测试:需要重启2个Tomcat服务器(dubbo-web和dubbo-service)
  • 2. 说明:源码下载

1. Dubbo – 分布式系统的相关概念(大型互联网项目架构目标 集群和分布式 架构演进)、Dubbo概述(Dubbo的概念和架构)、Dubbo快速入门(Zookepper的安装:注册中心中心)

2. Dubbo – Dubbo快速入门代码编写

3.Dubbo – dubbo-admin 的安装 介绍 使用

4. Dubbo – dubbo高级特性(序列化 地址缓存 超时与重试机制 多版本:灰度发布 负载均衡 集群容错策略 服务降级)

做这个案例需要安装Zookeeper(注册中心)

1. Dubbo快速入门代码编写


1.1 需求分析


1.2 项目和模块创建

创建一个dubbo-pro项目和他的2个模块,其中dubbo-service是普通模块,dubbo-webweb工程模块。


1.3 导入相关依赖

<?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-pro</artifactId><groupId>com.tian</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><packaging>war</packaging><artifactId>dubbo-web</artifactId><properties><spring.version>5.1.9.RELEASE</spring.version><dubbo.version>2.7.4.1</dubbo.version><zookeeper.version>4.0.0</zookeeper.version></properties><dependencies><!-- servlet3.0规范的坐标 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--spring的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!--springmvc的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency><!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><!--ZooKeeper客户端实现 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>${zookeeper.version}</version></dependency><!--ZooKeeper客户端实现 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>${zookeeper.version}</version></dependency><!--公共接口模块--><dependency><groupId>com.tian</groupId><artifactId>dubbo-service</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>
</project>

<?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-pro</artifactId><groupId>com.tian</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>dubbo-service</artifactId><properties><spring.version>5.1.9.RELEASE</spring.version><dubbo.version>2.7.4.1</dubbo.version><zookeeper.version>4.0.0</zookeeper.version></properties><dependencies><!-- servlet3.0规范的坐标 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!--spring的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!--springmvc的坐标--><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!--日志--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.21</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version></dependency><!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb --><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo</artifactId><version>${dubbo.version}</version></dependency><!--ZooKeeper客户端实现 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-framework</artifactId><version>${zookeeper.version}</version></dependency><!--ZooKeeper客户端实现 --><dependency><groupId>org.apache.curator</groupId><artifactId>curator-recipes</artifactId><version>${zookeeper.version}</version></dependency></dependencies></project>

1.4 编写提供服务的接口

DubboService.java

package com.tian.service;public interface DubboService {public String helloDubbo();
}

DubboServiceImpl.java

package com.tian.service.impl;import com.tian.service.DubboService;
import org.springframework.stereotype.Service;@Service
public class DubboServiceImpl implements DubboService {@Overridepublic String helloDubbo() {return "Hello Dubbo";}
}

配置日志文件和包扫描:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><context:component-scan base-package="com.tian.service"/>
</beans>

log4j.properties

# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=info, stdout,file
# My logging configuration...
#log4j.logger.com.tocersoft.school=DEBUG
#log4j.logger.net.sf.hibernate.cache=debug
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%nlog4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/iask.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n

1.5 编写调用服务的程序

DubboController.java

package com.tian.controller;import com.tian.service.DubboService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/dubbo")
public class DubboController {@Autowiredprivate DubboService dubboService;@RequestMapping("/hello")public String helloDubbo() {return dubboService.helloDubbo();}
}

springmvc.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><mvc:annotation-driven/><context:component-scan base-package="com.tian.controller"/>
</beans>

log4j.properties

# DEBUG < INFO < WARN < ERROR < FATAL
# Global logging configuration
log4j.rootLogger=info, stdout,file
# My logging configuration...
#log4j.logger.com.tocersoft.school=DEBUG
#log4j.logger.net.sf.hibernate.cache=debug
## Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%nlog4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/iask.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  %l  %m%n

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- Springmvc --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>

1.6 安装dubbo-service(被依赖的模块需要安装)

说明:我安装了一个Maven Helper


1.7 配置Tomcat






1.8 启动测试


http://localhost:8080/dubbo/hello.do


1.9 说明

现在的架构:虽然现在模块拆分了,但是并不是微服务架构,因为service模块(jar包)不可以作为独立的模块提供服务。

我们还需要把他改装成为这种结构


1.10 改造dubbo-service:服务提供者

1)把dubbo-service的打包方式改为war

2)改造 DubboServiceImpl

package com.tian.service.impl;import com.tian.service.DubboService;
import org.apache.dubbo.config.annotation.Service;/*** 现在不需要 @Service 注解了, @Service注解的作用是把该类的对象创建出来, 放到IOC中*//*注意现在的包是org.apache.dubbo和上面是不同的, 这个注解的作用是将这个类提供的方法(服务)对外发布. 将访问的地址(ip + 端口号 + 路径) 注册到注册中心*/
@Service
public class DubboServiceImpl implements DubboService {@Overridepublic String helloDubbo() {return "Hello Dubbo";}
}

3)配置注册中心地址

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><!--    <context:component-scan base-package="com.tian.service"/>--><!--    配置项目的名称 唯一--><dubbo:application name="dubbo-service"/><!--    配置注册中心的地址--><dubbo:registry address="zookeeper://192.168.135.130:2181"/><!--    配置dubbo包扫描--><dubbo:annotation package="com.tian.service.impl"/>
</beans>

4)把dubbo-service改造成web项目


web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- spring --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:spring/applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>
</web-app><!--    去掉springMVC相关配置-->

5)配置Tomcat 启动服务

我把这个端口设置成为了9000

如果启动没有报错就证明改造成功了。


1.11 改造dubbo-web:服务消费者

1)建立一个模块,里面存放公告的接口,然后安装该模块


2)dubbo-service和dubbo-web引入该模块

然后删去dubbo-web引入dubbo-service的依赖:

3)配置注册中心

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><mvc:annotation-driven/><context:component-scan base-package="com.tian.controller"/><!--    配置项目的名称 唯一--><dubbo:application name="dubbo-web"><dubbo:parameter key="qos.port" value="33333"/></dubbo:application><!--    配置注册中心的地址--><dubbo:registry address="zookeeper://192.168.135.130:2181"/><!--    配置dubbo包扫描--><dubbo:annotation package="com.tian.controller"/>
</beans>

4)改造web.xml


删去了spring相关的配置,留下了SpringMVC相关配置。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!-- Springmvc --><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 指定加载的配置文件 ,通过参数contextConfigLocation加载--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring/springmvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>
</web-app>

5)完成对DubboController的改造

DubboController.java

package com.tian.controller;import com.tian.service.DubboService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/dubbo")
public class DubboController {//    @Autowired 本地注入/*** 1. 从zookeeper注册中心获取userService的访问路径* 2. 进行远程调用(RPC)* 3. 将结果封装称为一个代理对象, 给变量赋值*/@Reference// 远程注入 org.apache.dubbo.config.annotation.Referenceprivate DubboService dubboService;@RequestMapping("/hello")public String helloDubbo() {return dubboService.helloDubbo();}
}

1.12访问测试:需要重启2个Tomcat服务器(dubbo-web和dubbo-service)

http://localhost:8080/dubbo/hello.do


2. 说明:源码下载

这是我做完的源码,如有需要,可以下载:

链接:https://pan.baidu.com/s/1bx38PRRaNy2DJ84-jRFTAA?pwd=3210
提取码:3210


Dubbo -- Dubbo快速入门代码编写相关推荐

  1. 最简单的dubbo教程-快速入门《一》

    最简单的dubbo教程-快速入门<一> 目录(?)[+] 所需环境 zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册. 可参考 ...

  2. 高性能RPC框架—----------------------Dubbo一站式快速入门

    https://blog.csdn.net/tangyang8941/article/details/88025412 一.Web应用架构的演变 ​    随着互联网的发展,网站应用的规模不断扩大,W ...

  3. Dubbo实战快速入门 (转)

    Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...

  4. 入门程序之入门代码编写

    <!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""h ...

  5. java代码快速_java代码编写快捷途经

    Ctrl+R  然后按下R键=SHift+Alt+R:对选定属性进行全局命名 Ctrl+D:删除当前行 Ctrl+Q: 定位到最后编辑的地方 Ctrl+L: 定位在某行 Ctrl+M:  最大化当前的 ...

  6. diea中,spring快速入门代码实现

    这里写目录标题 1.在idea中新建一个maven项目,勾选create...,直接下一步. 2.在pom.xml中配置spring 3.创建接口 4.简单写个私有方法 5.为这个接口创建一个对应的实 ...

  7. SpringMVC快速入门-代码实现

    ①导入Spring和SpringMVC的坐标.导入Servlet和Jsp的坐标 <!--Spring坐标--><dependency><groupId>org.sp ...

  8. MyBatis:快速入门代码实例(maven代码版)

    文章目录 1. MyBatis实例 1.1 添加Mybatis依赖 1.2 创建MyBatis配置文件 1.3.创建po类 1.4.创建映射文件 #{}: 表示sql参数,一个占位符. 1.5.测试 ...

  9. (Java每日一谈:第四日——幸福的四象限)主流框架:Dubbo基础实战篇--Dubbo快速入门

    在昨天的Dubbo基础篇中,小编对Dubbo的相关基础理论知识进行了一个详细的解释,如果大家对这一块的知识感到好奇,推荐大家可以去阅读一下小编昨天写的Dubbo相关知识点,今天小编会进行Dubbo实用 ...

最新文章

  1. php 追溯,php 无限分类父子追溯方法
  2. 判断深度学习模型的稳定性_问题引领构建数学模型,讲练结合促进深度学习
  3. 为什么 那么多 前端开发者都想学 Vue.js
  4. mysql数据库(10):数据 备份
  5. 信息学奥赛一本通(1074:津津的储蓄计划)
  6. 彩虹DS6.6免授权版源码+后台同步更新+独家防黑策略
  7. 详解MathType中如何插入特殊符号
  8. mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)
  9. 新手学习Linux——搭建个人论坛
  10. 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor
  11. SQL Unicode
  12. 初级Java程序员如何快速提升自己的能力?
  13. eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
  14. Mybatis-Plus SQL注入器的使用
  15. 大众点评爬取------分析成都必吃菜
  16. linux 安装字体库
  17. ubuntu18.04 网络配置 ipv4ipv6DNS路由
  18. Spring Security 记住我功能原理以及实现
  19. 详解docker镜像管理命令
  20. 广东省江门市谷歌卫星地图下载

热门文章

  1. 嘉兴桐乡技能培训提升-如何提高工作效率
  2. 曼切斯特编码c语言,曼彻斯特编码的接收C51程序
  3. SQL语法之CONSTRAINT约束操作
  4. 使用Python进行三维可视化
  5. AIGC|探索AIGC在网易严选中的应用
  6. linux系统给用户添加操作某个目录的权限
  7. Springboot中数据库连接
  8. Java 文件压缩工具类(支持多级目录压缩)
  9. 〖Python接口自动化测试实战篇⑧〗- 小案例 - 使用python实现接口请求 [查询天行数据]
  10. 快速傅里叶变换载波频偏估计算法 matlab,快速傅里叶变换载波频偏估计算法