【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费
前言
本周主题:加班工作。本周内忙于CRUD不能自拔,基本每天都是九点半下班,下周上线,明天还要加班推进进度。今天是休息日,于是重拾起了dubbo,打算近期深入了解一下其使用和原理。之所以说是重拾,是因为去年自学过一次,但那次主要是针对源码的流程,在实战上欠缺,且对其理解未深入到架构层次,只能说是基本理解。现在的我跟去年比起来,对技术的理解上有了一些提升,经验也更丰富,故本次目标是做深入研究,且看能从中吸收多少要义。
今天先记录一下dubbo本地服务的简易搭建流程。
一、环境准备
本次搭建用zookeeper作为注册中心,故需要准备好zookeeper环境。博主是在自己购置的阿里云服务器上搭建的,操作比较简单,可参见【https://yq.aliyun.com/articles/83804?spm=5176.10695662.1996646101.searchclickresult.5d89d8499feXWX】一文,其中要注意的是需提前在云服务器上开通2181端口(即zk的端口),否则dubbo服务会连不上,博主今天就是在这里排查了好久,才想到原来是自己犯蠢了。
二、项目构建
本地项目用的maven项目,一个消费模块一个服务模块,结构如下所示:

1、服务端代码
pom文件依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.0.1</version>
</dependency>
</dependencies>
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:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 应用名 -->
<dubbo:application name="my-dubbo-provider"/> <!-- 使用zookeeper注册中心暴露服务地址 -->
<dubbo:registry address="zookeeper://xxxx:2181" use-as-config-center="true" timeout="10000"/> <!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" /> <!-- 要暴露的服务接口 -->
<dubbo:service interface="com.dubbo.provider.DemoService" ref="demoServiceImpl" /> </beans>
服务类:
package com.dubbo.provider.impl; import com.dubbo.provider.DemoService;
import org.springframework.stereotype.Service; @Service
public class DemoServiceImpl implements DemoService { public String doSomething(String name) {
System.out.println("消费端传过来了:" + name);
return name + "做了XXOO!";
}
}
config类导入配置文件:
package com.dubbo.client; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource; @Configuration
@ImportResource("classpath:application-provider.xml")
@ComponentScan("com.dubbo")
public class ProviderConfig {
}
服务端启动类:
package com.dubbo.client;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.io.IOException;
public class ProviderClient {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ProviderConfig.class);
applicationContext.start();
try {
System.in.read(); // 任意输入即可退出
} catch (IOException e) {
e.printStackTrace();
}
}
}
启动后会一直提供服务,输入任意信息退出。
2、消费端代码
pom文件依赖:
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>my-dubbo-demo</groupId>
<artifactId>my-dubbo-demo-provider</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
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:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 消费方应用名 -->
<dubbo:application name="my-dubbo-consumer" /> <!-- 使用zookeeper注册中心暴露发现服务地址 -->
<dubbo:registry address="zookeeper://xxxx:2181" /> <!-- 引入服务 -->
<dubbo:reference id="demoService" interface="com.dubbo.provider.DemoService" />
</beans>
消费类:
package com.dubbo.consumer; import com.dubbo.provider.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class ConsumerDemo {
@Autowired
private DemoService demoService; public String consumeDemoService (String name) {
String result = demoService.doSomething(name);
System.out.println(result);
return result;
}
}
消费端配置类:
package com.dubbo.client; import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource; @Configuration
@ComponentScan("com.dubbo.consumer")
@ImportResource("classpath:application-consumer.xml")
public class ConsumerConfig {
}
消费端启动类:
package com.dubbo.client; import com.dubbo.consumer.ConsumerDemo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class ConsumerClient {
public static void main(String[] args) {
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(ConsumerConfig.class);
ConsumerDemo consumerDemo = applicationContext.getBean(ConsumerDemo.class);
consumerDemo.consumeDemoService("马甲哥");
}
}
3、启动调用
先启动服务端,此时登入zookeeper的客户端,通过ls /dubbo命令即可看到注册到zk上的服务端节点。
然后启动消费端main方法,发现服务调用成功。
消费端日志:

服务端日志:

至此,一个简易版的本地dubbo框架便搭建好了,后面要做的就是debug调试整个的调用流程,我们未完待续!

【2020-03-21】Dubbo本地环境搭建-实现服务注册和消费的更多相关文章
- 2-1 RHEL6.5 环境搭建与部署
第二部分:Linux常见服务管理 2-1 RHEL6.5 环境搭建与部署 第二部分主要讲解的是开源服务搭建 学习方法与注意事项: 1. 端正态度,开始学习 2. 认真完成作业和实验(并详细记录) 3. ...
- 【转载】Maven+druid+MyBatis+Spring+Oracle+Dubbo开发环境搭建
原地址:http://blog.csdn.net/wp1603710463/article/details/48247817#t16 Maven+druid+MyBatis+spring+Oracle ...
- Sonar本地环境搭建
一个新项目准备上线提测了,为了在提测之前做一下代码走查,同时了解项目目前的质量情况,就在本地搭建了一套sonar环境.搭建的过程中遇到了很多问题,sonar官方已不再维护Eclipse的svn插件,所 ...
- Docker下kafka学习三部曲之二:本地环境搭建
在上一章< Docker下kafka学习,三部曲之一:极速体验kafka>中我们快速体验了kafka的消息分发和订阅功能,但是对环境搭建的印象仅仅是执行了几个命令和脚本,本章我们通过实战来 ...
- AngularJS2之本地环境搭建
前言:本来准备初探AngularJS2,结果成了复习git和再探node git的两个常见问题:一.github上传时出现error: src refspec master does not matc ...
- .NET Exceptionless 日志收集框架本地环境搭建
一.简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等 ...
- Flink从入门到放弃(入门篇2)-本地环境搭建&构建第一个Flink应用
戳更多文章: 1-Flink入门 2-本地环境搭建&构建第一个Flink应用 3-DataSet API 4-DataSteam API 5-集群部署 6-分布式缓存 7-重启策略 8-Fli ...
- 以太坊remix-ide本地环境搭建
remix-ide简介 remix-ide是一款以太坊官方solisity语言的在线IDE,可用于智能合约的编写.测试与部署,不过某些时候可能是在离线环境下工作或者受限于网速原因,使用在线remi ...
- Dubbo简单环境搭建
Dubbo服务的发展和作用: 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是d ...
随机推荐
- [USACO5.1] Musical Themes
后缀数组求最长重复且不重叠子串. poj 1743 传送门 洛谷 P2743 传送门 1.子串可以“变调”(即1 3 6和3 5 8视作相同).解决办法:求字符串相邻元素的差形成新串.用新字符串求解最 ...
- 18岁,赚到了人生中的第一个10W!
大家好,我是九歌 今年我18岁,赚到了我人生中的第一个10W 截至2019年10月14日,我已经做了43天的公众号啦,粉丝也悄然增长到了1W8,感谢各位读者朋友给我的支持和鼓励. 相信大部分读者都是从 ...
- wxpython(2)--按钮,位图按钮,滑动块,微调控制器
本文介绍按钮,位图按钮,滑动块,微调控制器**.. 按钮 基本按钮 创建一个按钮,绑定点击事件,点击后修改Label 123456789101112131415161718 import wx cla ...
- win10下安装LoadRunner12汉化包
1.前提是已经下载LoadRunner安装文件,及已经安装成功: 安装包: 安装成功后,桌面会出现3个图标: 下面,开始安装汉化包: 1.右键点击“HP_LoadRunner_12.02_Commun ...
- LLVM 中间代码归纳
Identifiers 标识符 @ 全局 % 局部 后接字符串 命名量 @name %name 无符号数字 未命名量 @42 %42 类型系统 void 空类型 <type> * 指针类型 ...
- SpringBoot图文教程11—从此不写mapper文件「SpringBoot集成MybatisPlus」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- 丰富图文详解B-树原理,从此面试再也不慌
本文始发于个人公众号:TechFlow,原创不易,求个关注 本篇原计划在上周五发布,由于太过硬核所以才拖到了这周五.我相信大家应该能从标题当中体会到这个硬核. 周五的专题是大数据和分布式,我最初的打算 ...
- java线程组
1 简介 一个线程集合.是为了更方便地管理线程.父子结构的,一个线程组可以集成其他线程组,同时也可以拥有其他子线程组. 从结构上看,线程组是一个树形结构,每个线程都隶属于一个线程组,线程组又有父线程组 ...
- fork他人仓库文件及修改整合
1.首先使用浏览器打开自己的GitHub地址,并打开即将fork的文件地址(别人的文件地址),在其右上方找到fork选项并点击即可 2.在自己的电脑上创建一个文件夹后使用git bush here的C ...
- nginx前端服务部署
一.登录服务器 登录跳板机 执行list,列出所有机器 执行dssh 机器序号,如dssh 1,选择机器 二. 创建nginx配置文件 进入nginx配置目录:cd usr/local/nginx/c ...