springboot 集成 dubbo 环境的两种方式

本贴最后更新于 1935 天前,其中的信息可能已经时过境迁

1.利用 dubbo-start.jar 包中 @server @EnableDubbo 来替代使用 xml

2.利用 dubbo-start.jar 包中 @ImportResource 来使用 xml 文件集成 dubbo

第一步我们先搭建一个 springboot 的项目如下:
图片.png
在 pom 文件中写入依赖:

         <modules>
		<module>dubbo-common</module>
		<module>dubbo-provider</module>
	</modules>

<dependencyManagement>
		<dependencies>
			<!-- dubbo 替换 dubbox-->
			<dependency>
				<groupId>com.alibaba</groupId>
				<artifactId>dubbo</artifactId>
				<version>2.6.2</version>
			</dependency>
			<!-- curator-recipes 替换 zkclient-->
			<!--<dependency>
				<groupId>org.apache.curator</groupId>
				<artifactId>curator-recipes</artifactId>
				<version>4.0.1</version>
			</dependency>-->
			<!--其实我们现在使用的是curator来替换zkclient-->
			<dependency>
				<groupId>org.apache.curator</groupId>
				<artifactId>curator-framework</artifactId>
				<version>2.6.0</version>
			</dependency>
			<!--alibaba提供的启动项-->
			<dependency>
				<groupId>com.alibaba.spring.boot</groupId>
				<artifactId>dubbo-spring-boot-starter</artifactId>
				<version>2.0.0</version>
			</dependency>
			<dependency>
				<groupId>org.projectlombok</groupId>
				<artifactId>lombok</artifactId>
				<version>1.18.8</version>
			</dependency>
		</dependencies>
	</dependencyManagement>

接着我们在 dubbo-zk project 下新建一个 module 名为:
图片.png
里面 pom 这样写:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.ouyu.dubboZk</groupId>
		<artifactId>dubbo-zk</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<artifactId>dubbo-common</artifactId>


	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
	</dependencies>


</project>

ok 我们在 common module 中新建两个 package 一个叫 entity 一个是 service图片.png
图片.png
在 service 中新建个接口 UserService 写入一个方法
图片.png
ok 接着来建造另一个依赖 dubbo-provider
在其 pom 文件中引入:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.ouyu.dubboZk</groupId>
		<artifactId>dubbo-zk</artifactId>
		<version>0.0.1-SNAPSHOT</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<artifactId>dubbo-provider</artifactId>


	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>com.ouyu.dubboZk</groupId>
			<artifactId>dubbo-common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
		<!-- dubbo 替换 dubbox-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>dubbo</artifactId>
		</dependency>
		<!-- curator-recipes 替换 zkclient-->
		<dependency>
			<groupId>org.apache.curator</groupId>
			<artifactId>curator-framework</artifactId>
		</dependency>
		<dependency>
			<groupId>com.alibaba.spring.boot</groupId>
			<artifactId>dubbo-spring-boot-starter</artifactId>
		</dependency>
		<!--<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<version>2.1.6.RELEASE</version>
		</dependency>-->
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

在 propertist 文件中写

server.port=8081
server.context-path=/

spring.application.name=dubbo-spring-boot-starter
dubbo.application.name=springboot_demo
dubbo.registry.address=zookeeper://120.79.63.27:2181  #这是你的zookeeper地址
dubbo.provider.threads=10
dubbo.provider.threadpool=fixed
dubbo.provider.loadbalance=roundrobin
dubbo.server=true
dubbo.protocol.name=dubbo

在 application 上加上注解 @EnableDubbo
图片.png
在 main 方法中写入 dubbo 的启动方法 Main.main(args);
接着新建 servicepackage
图片.png
在实现类上面打上 dubbo 的 @Service 注解和 spring 的 @Componet 注解以便服务的注册于发现 在 @Service 上写上 version 版本信息 等消费消费的时候会用到务必要填
服务提供端我们就完成了 现在开始启动试试

图片.png
看到对应圈住的信息就说明 ok

现在我们来把消费者搞起来 新建 module dubbo-comsumer
pom 中的依赖跟 provider 中其实都一样 只是增加了一个 web 的框架

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

在 properties 中

#server
server.port=8082
server.context-path=/
#dubbo
spring.application.name=dubbo-spring-boot-starter


dubbo.rpotocol.port=20880

spring.dubbo.application.id=springboot_demo
dubbo.application.name=springboot_demo
dubbo.registry.address=zookeeper://120.79.63.27:2181
dubbo.protocol.name=dubbo

在 application 中写上 @EnableDubbo 注解就行
图片.png

我们看到我们 userService 变量上加上了 @Reference 注解上面写上了对应服务提供者的版本信息
ok 现在启动测试下
图片.png
看到上面圈住的信息 就说明没毛病老铁
打开浏览器输入 http://localhost:8082/dubbo/api/userInfo
图片.png
得到返回 json 大功告成 基于 springboot 的 dubbo 没使用 xml 实现
二。我们使用 xml
在 provider 模块中把 properties 都注释掉出了端口号 在下面新建 provider.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="hello-world-app" />
    <dubbo:registry address="zookeeper://120.79.63.27:2181" />
    <dubbo:protocol name="dubbo" port="20880" />
    <bean id="userService" class="com.ouyu.dubbozk.service.UserserviceImpl"/>
    <dubbo:service interface="com.ouyu.dubbozk.service.UserService" ref="userService" version="1.0.0"/>

</beans>

在 aplication 中隐藏点 @EnableDubbo 注解增加 @ImporResource 注解
图片.png
在 UserServiceImpl 中把 @Componet @Service 删掉
启动时 信息跟基于注解的一样 没问题
重点在于服务消费者模块上面
一样把他下面的 properties 中信息给注释掉新建 comsumer.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="hello-world-app1"/>
    <dubbo:registry  address="zookeeper://120.79.63.27:2181"/>
    <dubbo:reference id="userService" check="false" interface="com.ouyu.dubbozk.service.UserService" version="1.0.0"/>
</beans>

这个里面的 version 可写可不写
在 application 中只增加 @ImportResouce 注解不删除 @EnableDubbo 注解
图片.png

api 提供那个地方一定不要改了 就使用 @Reference(version = "1.0.0") 记住加上版本信息

启动规矩的很 稳不稳的 跟注解访问一样
好了今天的讲解就到这里为止

  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 597 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    944 引用 • 1459 回帖 • 17 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...