Dubbo -- Dubbo快速入门代码编写
文章目录
- 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-web
是web
工程模块。
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快速入门代码编写相关推荐
- 最简单的dubbo教程-快速入门《一》
最简单的dubbo教程-快速入门<一> 目录(?)[+] 所需环境 zookeeper作为dubbo的注册中心,dubbo服务提供方和消费方都需要在zookeeper注册中心注册. 可参考 ...
- 高性能RPC框架—----------------------Dubbo一站式快速入门
https://blog.csdn.net/tangyang8941/article/details/88025412 一.Web应用架构的演变 随着互联网的发展,网站应用的规模不断扩大,W ...
- Dubbo实战快速入门 (转)
Dubbo是什么? Dubbo[]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案. 其核心部分包含: 远程通讯: 提供对多种基于长连接的NIO框架抽象封 ...
- 入门程序之入门代码编写
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""h ...
- java代码快速_java代码编写快捷途经
Ctrl+R 然后按下R键=SHift+Alt+R:对选定属性进行全局命名 Ctrl+D:删除当前行 Ctrl+Q: 定位到最后编辑的地方 Ctrl+L: 定位在某行 Ctrl+M: 最大化当前的 ...
- diea中,spring快速入门代码实现
这里写目录标题 1.在idea中新建一个maven项目,勾选create...,直接下一步. 2.在pom.xml中配置spring 3.创建接口 4.简单写个私有方法 5.为这个接口创建一个对应的实 ...
- SpringMVC快速入门-代码实现
①导入Spring和SpringMVC的坐标.导入Servlet和Jsp的坐标 <!--Spring坐标--><dependency><groupId>org.sp ...
- MyBatis:快速入门代码实例(maven代码版)
文章目录 1. MyBatis实例 1.1 添加Mybatis依赖 1.2 创建MyBatis配置文件 1.3.创建po类 1.4.创建映射文件 #{}: 表示sql参数,一个占位符. 1.5.测试 ...
- (Java每日一谈:第四日——幸福的四象限)主流框架:Dubbo基础实战篇--Dubbo快速入门
在昨天的Dubbo基础篇中,小编对Dubbo的相关基础理论知识进行了一个详细的解释,如果大家对这一块的知识感到好奇,推荐大家可以去阅读一下小编昨天写的Dubbo相关知识点,今天小编会进行Dubbo实用 ...
最新文章
- php 追溯,php 无限分类父子追溯方法
- 判断深度学习模型的稳定性_问题引领构建数学模型,讲练结合促进深度学习
- 为什么 那么多 前端开发者都想学 Vue.js
- mysql数据库(10):数据 备份
- 信息学奥赛一本通(1074:津津的储蓄计划)
- 彩虹DS6.6免授权版源码+后台同步更新+独家防黑策略
- 详解MathType中如何插入特殊符号
- mysql 绕过select报错_Web安全之SQL注入(原理,绕过,防御)
- 新手学习Linux——搭建个人论坛
- 为什么阿里规定需要在事务注解@Transactional中指定rollbackFor
- SQL Unicode
- 初级Java程序员如何快速提升自己的能力?
- eds能谱图分析实例_热场发射扫描电子显微镜与能谱分析仪
- Mybatis-Plus SQL注入器的使用
- 大众点评爬取------分析成都必吃菜
- linux 安装字体库
- ubuntu18.04 网络配置 ipv4ipv6DNS路由
- Spring Security 记住我功能原理以及实现
- 详解docker镜像管理命令
- 广东省江门市谷歌卫星地图下载