【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 ...
随机推荐
- montagy
因为只是想分享ghcjs和webgl的使用经验,所以很多地方说的很粗,因为涉及的知识确实很多, 推荐两本书,一本haskell基础的 learn you a haskell for great goo ...
- ACID原则
ACID原则是数据库事务正常执行的四个,分别指原子性.一致性.独立性及持久性. 事务的原子性(Atomicity)是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如 ...
- phpStrom安装PHP_CodeSniffer检查代码规范
为什么使用PHP_CodeSniffer 一个开发团队统一的编码风格,有助于他人对代码的理解和维护,对于大项目来说尤其重要. PHP_CodeSniffer是PEAR中的一个用PHP5写的用来检查嗅探 ...
- 吴裕雄--天生自然KITTEN编程:行走
- [Python_scrapy图片爬取下载]
welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...
- bzoj1603: [Usaco2008 Oct]打谷机 (纱布题)
Description Input Output Sample Input Sample Output Time Limit: 5 Sec Memory Limit: 64 MB Submit: 7 ...
- Day 1 模拟
1. P1088 火星人 利用STL中的next_permutation();函数求一种排列的下一种排列,循环m次即为答案.(STL大法好~~C++是世界上最好的语言~~逃 #include < ...
- 微信小程序从开发至发布的流程
今天在公司将这几天开发的小程序,进行版本上线,在这里记录下. 首先,将微信开发工具里的代码上传到微信小程序平台里,如下所示 之后,在微信小程序平台进行审核提交,填写相应的信息即可,注意,审核提交分为紧 ...
- nx-admin1.2版本发布
nx-admin 是一个开源的管理系统前端集成方案 github地址 nx-admin的初心 组件更易用, 让每个小白快速上手, 最大程度上帮助个人,企业节省时间成本和费用开支. 尽管这个过程不简单, ...
- 【30分钟学完】canvas动画|游戏基础(6):坐标旋转探究
前言 本篇主要讲坐标旋转及其应用,这是编程动画必不可少的技术. 阅读本篇前请先打好前面的基础. 本人能力有限,欢迎牛人共同讨论,批评指正. 坐标旋转 模拟场景:已知一个中心点(centerX,cent ...