springboot+dubbo+mybatis(注册中心使用的是zookeeper)学习

1、dubbo简单介绍(废话节点)

Dubbo开始于电商系统,是一款分布式服务框架,拥有高性能和透明化的RPC远程服务调用方案以及SOA服务治理方案。她每天为2千多个服务提供大于30亿次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点以及别的公司的业务中。

2、搭建dubbo之前期准备工作

2.1、下载安装配置好zookeeper

具体的安装方法,参考下面的博文,说起来太麻烦了:
http://blog.csdn.net/tlk20071/article/details/52028945

2.2、安装dubbo admin管理控制台

具体的安装方法,参考下面的博文,亲测有效:
https://www.jianshu.com/p/3d619740883c
**PS:**我没有把这个项目打成war/jar包,直接在idea中导入了,然后可以启动并且使用,输入账号密码(都是root)之后的界面是这样的:
在这里插入图片描述然后如果有服务或者消费请求都会有显示:
在这里插入图片描述在这里插入图片描述

3、开始实现springboot+dubbo+mybatis微服务集成

整体的思路,参考如下的博客,也是涨到了一波知识:
https://blog.csdn.net/typ1805/article/details/80726623

3.1、忽略第一步,因为我们zookeeper已经安装部署完成了。

3.2、直接进入新建项目环节

3.2.1、 首先建一个springboot-dubbo-parent的总的项目。
3.2.2、 然后在里面new 两个 model(分别是springboot-dubbo-server 和springboot-dubbo-client),然后删除springboot-dubbo-server的其他文件,只保留一个pom.xml文件。接下来在springboot-dubbo-server模块中再new 两个model(分别是springboot-dubbo-provider和 spr-dubbo-api)。具体的结构是这样的:
在这里插入图片描述
3.2.3 配置每个模块的pom.xml文件:
首先是最外面parent的pom.xml文件(主要是依赖部分):

<groupId>com.example</groupId>
	<artifactId>springboot-dubbo-parent</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<name>springboot-dubbo-parent</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<modules>
		<module>springboot-dubbo-server</module>
		<module>springboot-dubbo-client</module>
	</modules>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>

		<!-- 在properties中统一控制依赖包的版本,更清晰-->
		<dubbo.version>2.5.3</dubbo.version>
		<zk.version>3.4.5</zk.version>
		<zkclient.version>0.1</zkclient.version>
	</properties>

	<dependencyManagement>   <!--dependencyManagement用于管理依赖版本号-->
		<dependencies>
			<!--删除spring-boot-starter和spring-boot-starter-test,-->
			<!--因为parent中继承的祖先中已经有了,并且一般dependencyManagement管理的依赖都要写版本号-->
			<!--<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter</artifactId>
			</dependency>

			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-test</artifactId>
				<scope>test</scope>
			</dependency>-->

			<dependency>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-starter-web</artifactId>
				<version>1.5.9.RELEASE</version>
			</dependency>

			<!--新增后续dubbo项目中所需依赖,dubbo、zk-->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>dubbo</artifactId>
				<version>${dubbo.version}</version><!--使用properties中配置的版本号-->
				<exclusions>
					<exclusion>
						<groupId>org.springframework</groupId>
						<artifactId>spring</artifactId>
					</exclusion>
				</exclusions>
			</dependency>

			<dependency>
				<groupId>org.apache.zookeeper</groupId>
				<artifactId>zookeeper</artifactId>
				<version>${zk.version}</version>
				<exclusions>
					<exclusion>
						<groupId>org.slf4j</groupId>
						<artifactId>slf4j-log4j12</artifactId>
					</exclusion>
					<exclusion>
						<groupId>log4j</groupId>
						<artifactId>log4j</artifactId>
					</exclusion>
				</exclusions>
			</dependency>
			<dependency>
				<groupId>com.github.sgroschupf</groupId>
				<artifactId>zkclient</artifactId>
				<version>${zkclient.version}</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

springboot-dubbo-server的pom.xml文件:

	<groupId>com.example</groupId>
	<artifactId>springboot-dubbo-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>

	<name>springboot-dubbo-server</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.example</groupId>
		<artifactId>springboot-dubbo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<modules>
		<module>springboot-dubbo-api</module>
		<module>apringboot-dubbo-provider</module>
	</modules>

springboot-dubbo-provider的pom.xml文件:

<groupId>com.example.demo.provider</groupId>
	<artifactId>apringboot-dubbo-provider</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>apringboot-dubbo-provider</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.example</groupId>
		<artifactId>springboot-dubbo-server</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<properties>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--新增后续dubbo项目中所需依赖,dubbo、zk。
           父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>

		<dependency>
			<groupId>com.example.admo.api</groupId>
			<artifactId>springboot-dubbo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>

springboot-dubbo-client的pom.xml文件:

	<artifactId>springboot-dubbo-client</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot-dubbo-client</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.example</groupId>
		<artifactId>springboot-dubbo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<properties>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--新增后续dubbo项目中所需依赖,dubbo、zk。
           父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.zookeeper</groupId>
			<artifactId>zookeeper</artifactId>
		</dependency>
		<dependency>
			<groupId>com.github.sgroschupf</groupId>
			<artifactId>zkclient</artifactId>
		</dependency>

		<dependency>
			<groupId>com.example.admo.api</groupId>
			<artifactId>springboot-dubbo-api</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>

springboot-dubbo-api的pom.xml文件:

<groupId>com.example.admo.api</groupId>
	<artifactId>springboot-dubbo-api</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>springboot-dubbo-api</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>com.example</groupId>
		<artifactId>springboot-dubbo-server</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

3.2.4 dubbo配置文件provider.xml:

 <!-- 提供方应用信息,用于计算依赖关系 -->
    <dubbo:application name="demo-provider" />
    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry protocol="zookeeper" address="localhost:2181" timeout="60000"/>
    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 暴露dubbo服务的方式一-->
    <!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
    <!--<dubbo:annotation package="com.example.demo.api.service"/>-->
    <!--另外一种是全局新修改的办法(timeout时间可以自己调整)-->
    <dubbo:provider delay="-1" timeout="12000" retries="0"/>
    <!-- 暴露dubbo服务的方式二 -->
    <!-- 使用xml配置方式申明暴露一个接口服务,在程序启动的时候会自动注册到zookeeper。
         等同于在类上打@service注解,打了注解就必须要用annotation指定启动扫描路径,使用这种方式,就不需要指定annotation了-->
    <dubbo:service interface="com.example.demo.api.service.UserService" ref="userService"/>
    <!-- 具体的实现bean,id与上面的ref要一致-->
    <bean id="userService" class="com.example.demo.provider.api.impl.UserServiceImpl"/>

dubbo配置文件consumer.xml:

    <!--消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="demo-consumer"/>

    <!--zookeeper注册中心 -->
    <dubbo:registry  protocol="zookeeper" address="localhost:2181" timeout="60000"/>

    <!--关闭服务消费方所有服务的启动检查。dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。-->
    <dubbo:consumer check="false" />

    <!-- 使用注解方式创建远程服务代理-->
    <dubbo:annotation package="com.example.demo.controller"/>

    <!-- 使用xml配置方式创建远程服务代理,id即为provider.xml中暴露的服务的id-->
    <!-- 等同于dubbo:annotation 加上代码里的@Reference注解-->
    <dubbo:reference id="userService" interface="com.example.demo.api.service.UserService"/>

3.2.5 配置mybatis
在数据库中建表test 里面就两个字段(id 和 user_name)
数据库配置如下:
其中(10.10.38.54:3306/tao_dev换成你自己的数据库,还有下面的username和password)

spring.datasource.url=jdbc:mysql:// 10.10.38.54:3306/tao_dev?useUnicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.max-active=10
spring.datasource.max-idle=5
spring.datasource.min-idle=0

4、启动项目

先打开安装好的zookeeper(找到bin文件下的zkServer,点击启动。如果闪退就说明zookeeper没有弄好),然后启动SpringbootDubboProviderApplication和SpringbootDubboClientApplication。
运行成功如下图:
在这里插入图片描述在这里插入图片描述
浏览器页面如图:
在这里插入图片描述这时候就可以观察dubbo-admin的界面了,会有一个提供者和一个消费者出现,然后就可以自己摸索一下dubbo-admin的其他的功能啦。

5、说明

本次项目是用来学习Dubbo框架的练习项目,参考了https://blog.csdn.net/typ1805/article/details/80726623的博客,其中他有源码下载地址放出来,如果直接使用他的源码,要改一个地方把springboot-dubbo-client模块中的controller中的 @Reference
换成@Autowired
在这里插入图片描述
否则会出现一个error。
建议:如果无从下手,可以先把源码拉下来,但是还是要把之前的那些配置好,然后先运行起来看看,然后再自己动手搭一遍,能更加深刻的理解它的这个机制。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值