【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 ...
随机推荐
- 在 Ubuntu 14.04 安装 PyCharm 5 & Oracle JDK
由于授权问题,在较新的Linux发行版本中都不再包含Oracle Java,取而代之的是OpenJDK.Ubuntu也是如此. OpenJDK能满足大部分的应用程序运行条件,但PyCharm无法在Op ...
- 安装NSQ
安装文档 https://nsq.io/deployment/installing.html 打开连接后,根据系统找到对应的二进制包 一般都是linux则下载 https://s3.amazonaws ...
- 重大改革!Python,最接近人工智能的语言~将被加入高考科目!
就在前几天,和一位浙江省高校的信息技术老师聊天,我得到了一个震惊的消息: 明年,浙江省信息技术教材将不会在使用晦涩难懂的VB语言,而是改学更简单易懂的Python语言.也就是说, Python语言将纳 ...
- windows dnsrecon
缺了两个模块 第一个:https://pypi.python.org/pypi/netaddr 第二个:dnspython 找到下载后setup.py install就OK了,话说GFW真***了,用 ...
- Vimium - 让你体验Geek般的浏览体验
相信很多电脑高手们都会寻找一一些快捷高效的操作方式,如经常利用键盘的快速操作,让你脱离鼠标,可以让你不用花太多精力地去移动细小的指针进行操作,使得工作的效率提高许多. 不过,实际上很多时候我们还是不得 ...
- 2——PHP defined()函数
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- 记一个 Base64 有关的 Bug
本文原计划写两部分内容,第一是记录最近遇到的与 Base64 有关的 Bug,第二是 Base64 编码的原理详解.结果写了一半发现,诶?不复杂的一个事儿怎么也要讲这么长?不利于阅读和理解啊(其实是今 ...
- 8.【Spring Cloud Alibaba】配置管理-Nacos
使用Nacos管理配置 架构图 配置文件遵循的格式 bootstrap.yml pom.xml <dependency> <groupId>org.springframewor ...
- 初学Qt——菜单栏QAction+ QstackedWidget堆栈窗体实现切换分页
QstackedWidget 堆栈窗体,具体不作详述,stackedWidget 主要实现效果类似与界面分页效果,主要常与QListWidget QtreeWidget QTableWidget等结合 ...
- ASP.NET Core 反向代理部署知多少
引言 最近在折腾统一认证中心,看到开源项目IdentityServer4.Admin集成了IdentityServer4和管理面板,就直接拿过来用了.在尝试Nginx部署时遇到了诸如虚拟目录映射,请求 ...