博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dubbo入门(2) - 简单实践
阅读量:6303 次
发布时间:2019-06-22

本文共 8290 字,大约阅读时间需要 27 分钟。

作者:不洗碗工作室 - Marklux

出处:

版权归作者所有,转载请注明出处

在了解什么是分布式框架之后,我们需要上手实践一下,来了解整个系统是如何运作起来的。

本文抱着学习的目的来尝试使用dubbo搭建一个简单的分布式服务,并且使用dubbokeeper来进行服务的监控。

参考自:和

准备工作

在正式使用dubbo之前,需要准备两样东西:

1. 服务注册中心(ZooKeeper)

dubbo的消费方和服务方都需要在一个统一的注册中心进行注册才能使用,搭建一个zookeeper即可,当然你也可以使用其他的注册中心并集成进去。

zookeeper的搭建流程很简单,参考即可(仅仅是最简单的单机版,并不复杂)。

2. 服务监控中心(dubbokeeper)

为了监控整个分布式服务的运行情况,最好能够有一个可视化的管理和监控应用,这里选用由dubboclub团队开发的,当然也可以使用dubbo官方的dubboadmin项目。

由于dubbokeeper的部署有些复杂,在这里还是简要的描述一下,注意监控软件并不是必要的,但是为了能够看到服务运行的效果,建议还是部署一个。

部署流程参考

下载源码

首先需要获取dubbokeeper的源码,可以从github上获取,git地址:

https://github.com/dubboclub/dubbokeeper复制代码

下面我们假设将dubbokeeper克隆到了~/dubbokeeper这个目录下。

修改配置

在此之前,首先需要确定你要使用何种数据库,dubbokeeper目前支持MySQL,MongoDB和Lucene三种数据储存方案,我们以MySQL为例进行部署。

首先要填写~/dubbokeeper/conf/dubbo-mysql.properties配置文件,下面给出比较重要的配置项说明:

dubbo.registry.address=zookeeper://localhost:2181 #注册中心地址dubbo.protocol.name=dubbodubbo.protocol.port=20884 #dubbo服务端口dubbo.monitor.mysql.url=jdbc:mysql://localhost:3306/dubbo-monitor #mysql服务地址dubbo.monitor.mysql.username=rootdubbo.monitor.mysql.password=secret #用户名及密码复制代码

接下来要填写~/dubbokeeper/dubbokeeper-ui/src/main/resources/dubbo.properties配置文件中的注册中心和网络服务器类型等参数。

初始化数据库

创建一个mysql数据库,并运行~/dubbokeeper/doc/storage/mysql/sql/application.sql创建表结构。

编译打包

执行~/dubbokeeper/install-mysql.sh进行打包,最终会生成target输出目录。

启动部署

这一步要启动几个服务后才能去部署应用,注意顺序

首先需要启动zookeeper服务,注意端口的配置要和配置文件一致。

接下来执行target目录下的mysql-dubbokeeper-server/bin/start-mysql.sh启动储存服务。

最后将target目录下的mysql-dubbokeeper-ui中的war包复制到tomcat(自己部署)的webapps目录下,启动tomcat便会自动进行解压和安装,之后访问http://localhost:8080/dubbokeeper-ui-1.0.1看到如下界面,即为安装成功。

创建API

现在正式开始编程。我们将使用dubbo创建一个非常简单的、只有一个消费者和一个服务提供方的例子。

首先第一步是创建双方都需要依赖的数据交换定义,通过一个interface来实现。

创建maven项目msa-demo-apipom.xml文件内容如下:

4.0.0
com.marklux
msa-demo-api
1.0-SNAPSHOT
pom
0.3.0
2.5.3
2.8.4
4.3.6.RELEASE
1.7
UTF-8
com.alibaba
dubbo
2.5.3
org.springframework
spring
com.github.sgroschupf
zkclient
0.1
org.springframework
spring-core
${spring.version}
org.springframework
spring-beans
${spring.version}
org.springframework
spring-context
${spring.version}
org.springframework
spring-jdbc
${spring.version}
org.springframework
spring-web
${spring.version}
org.springframework
spring-webmvc
${spring.version}
org.springframework
spring-aop
${spring.version}
org.springframework
spring-tx
${spring.version}
org.springframework
spring-orm
${spring.version}
org.springframework
spring-context-support
${spring.version}
org.springframework
spring-test
${spring.version}
org.springframework
spring-jms
${spring.version}
org.aspectj
aspectjrt
1.6.11
org.aspectj
aspectjweaver
1.6.11
复制代码

然后在com.marklux.dubbo.demo包中添加DemoService接口,代码如下:

package com.marklux.dubbo.demo;/** * Created by lumin on 18/5/15. */public interface DemoService {    String sayHello(String name);}复制代码

之后的服务提供方根据这个接口实现服务,消费者根据接口调用服务。(有点类似Thrift里的IDL文件)

创建服务提供者

创建一个新的maven模块msa-demo-provider,用于实现DemoService服务。模块结构如下:

项目的pom.xml中需要添加对msa-demo-api模块的依赖:

4.0.0
com.marklux
msa-demo-provider
1.0-SNAPSHOT
com.marklux
msa-demo-api
1.0-SNAPSHOT
复制代码

首先编写DemoServiceImpl实现服务内容,代码如下:

package com.marklux.dubbo.demo.impl;import com.marklux.dubbo.demo.DemoService;import org.springframework.stereotype.Service;/** * Created by lumin on 18/5/15. */@Service("demoService")public class DemoServiceImpl implements DemoService {    public String sayHello(String name) {        return "Hello, " + name;    }}复制代码

接下来填写msa-demo-provider.xml配置文件,配置服务接入注册中心,以及暴露端口号:

复制代码

然后填写springmvc.xml,用于给入口类提供Spring服务容器的配置:

复制代码

最后在com.marklux.dubbo.demo.test包中添加测试启动类,用于启动服务:

package com.marklux.dubbo.demo.test;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/** * Created by lumin on 18/5/15. */public class DemoServiceImplTest  {    public static void main(String[] args) {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-mvc.xml");        context.start();        System.out.println("Dubbo Service started....");        try {            System.in.read();   // 按任意键退出        } catch (IOException e) {            e.printStackTrace();        }    }}复制代码

启动DemoServiceImplTest类后服务就会注册并启动,这时候可以在dubbokeeper中看到服务的状态:

创建消费者

最后来创建一个调用服务的消费者,添加一个maven模块msa-demo-clientpom.xml同上,添加对msa-demo-api模块的依赖,注意并不需要msa-demo-provider的依赖。

模块的结构如下:

只有一个测试的启动类,代码如下:

package com.marklux.dubbo.demo.test;import com.marklux.dubbo.demo.DemoService;import org.springframework.context.support.ClassPathXmlApplicationContext;import java.io.IOException;/** * Created by lumin on 18/5/15. */public class DemoServiceConsumerTest {    public static void main(String[] args) {        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{
"classpath:springmvc.xml"}); context.start(); DemoService demoService = (DemoService) context.getBean("demoService"); System.out.println(demoService.sayHello("哈哈哈")); try { System.in.read(); } catch (IOException e) { e.printStackTrace(); } }}复制代码

记得补充dubbo的配置文件msa-demo-client.xml和spring的配置文件springmvc.xml,如下:

复制代码
复制代码

万事俱备,现在启动DemoServiceConsumerTest,可以看到成功调用了DemoService

在dubbokeeper中同样可以查看到其相关状态:

小结

至此,一个最简单的使用dubbo协议进行服务-调用的demo就完成了。可以看到最显著的特点是,在消费者中调用服务方提供的服务无需添加额外代码,整个调用过程完全透明。

另外借助dubbokeeper这样的监控端,也更能够直观的理解整个应用服务的分布和运行情况。

你可能感兴趣的文章
Linux信号 编程
查看>>
有关滚动与位置
查看>>
Box2D自定义重力
查看>>
chpasswd
查看>>
mysqldump --single-transaction 和--lock-tables参数详解
查看>>
android 数据库_sql语句总结
查看>>
python购物车
查看>>
解决python2和python3的pip冲突
查看>>
面试/编程
查看>>
linux每日命令(16):head命令
查看>>
公司内部分享【富有成效的每日站会】总结
查看>>
打造一个上传图片到图床利器的插件(Mac版 开源)
查看>>
iOS横竖屏
查看>>
thinkphp判断更新是否成功
查看>>
Do While ... Loop 与 Do Until ... Loop 的区别
查看>>
【Linux】查询某个字符串出现次数
查看>>
高效使用jquery之一:请使用'On'函数
查看>>
冲刺第一周第三天
查看>>
ERP环境检测工具设计与实现 Environment Detection
查看>>
不要在构造中做太多事情,不然有时候会出现有意思的代码~
查看>>