记录一下springboot整合dubbo过程
SpringBoot 2.0.3
Dubbo Spring Boot 0.2.0
zookeeper 3.3.6
maven 3.3.9
一、创建项目工程
GroupId和ArtifactId被统称为“坐标”是为了保证项目唯一性而提出的,如果你要把你项目弄到maven本地仓库去,你想要找到你的项目就必须根据这两个id去查找。
GroupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。
ArtifactId 也是当前工程的名字,定义maven项目在组中唯一的ID
比如我创建一个项目,我一般会将GroupId设置为cn.zt,cn表示域为中国,zt是我个人姓名缩写,ArtifactId设置为testpro,表示你这个项目的名称是testpro,依照这个设置,在你创建Maven工程后,新建包的时候,包结构最好是cn.zt.testpro打头的,如果有个UserDao,它的全路径就是cn.zt.testpro.dao.UserDao
(1)父工程pom文件
<!--parent是springboot最最核心的依赖,所有的配置都在里面,并且是springboot项目必须引入的-->
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.3.RELEASE</version> <relativePath/> </parent>
三、创建服务提供者工程
(1)再分别创建服务提供的api、impl、model
(2)这里需要注意几点
1、Impl引入dubbo依赖
引入dubbo依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
并且实现类的@Service应该是com.alibaba.dubbo.config.annotation.Service
2、model实体类需要实现Serializable序列化接口
(3)提供者Implapplication.properties配置
使用多环境配置方式
#项目启动端口号 server.port=8101 # Dubbo 服务消费者配置 dubbo.application.name=testpro_provider # Dubbo 扫描包的路径 dubbo.scan.basePackages=cn.zt.testpro.impl # Dubbo 注册id dubbo.registry.id=testpro_provider # Dubbo 服务端口号 dubbo.protocol.port=20881 # Dubbo 注册中心地址 dubbo.registry.address=zookeeper://127.0.0.1:2181
(4)创建服务提供者的启动类
引入依赖(非web项目)
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency>
使用@SpringBootApplication注解即可,然后开启zookeeper,启动服务提供的启动类
服务提供者启动成功,还可以下载dubbo-admin的war包,查看服务的注册情况
四、创建服务消费者工程
(1)创建工程、启动类、引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.0.3.RELEASE</version> </dependency>
这个依赖是web项目需要引入的,同样启动类使用@SpringBootApplication注解即可
(2)配置application.properties
dubbo配置
#服务名称 spring.application.name=consumer #服务启动端口号 server.port=8100 ## Dubbo 服务名称 ==> java.lang.reflect.InvocationTargetException: null 没有这项配置会报错,无法注册到zookeeper dubbo.application.name=consumer ## Dubbo 服务端口号 dubbo.protocol.port=20888 ## Dubbo 服务注册地址 dubbo.registry.address=zookeeper://127.0.0.1:2181 ## Dubbo 服务扫描包路径 dubbo.scan.base-packages=cn.zt.consumer ## Dubbo 服务是否注册到注册中心 dubbo.registry.register=true
(3)创建controller类
@Controller和@RestController和@ResponseBody
@Controller
@Controller注解标注类的方法,return时会被视图处理器识别成静态文件的路径。默认为templates文件夹下。如return "test/hello"表示的是默认路径下的test文件夹中的名叫hello的文件,带上后缀名.html或btl等也可以识别。
@RestController
@RestController是@Controller和@ResponseBody的结合体,只能注解类,return返回的值将被转换成json,字符串除外,直接写入HTTP相应体返回到页面中。
需要注意的是,只在类上注解@ResponseBody类中方法映射的URL并不能起作用,加上@Controller注解后才可以接受处理HTTP请求,同时加上 @RestController是@Controller和只写@ResponseBody是一样的效果
@RequestMapping
它可以注解类也可以注解方法,注解类时标注请求的路径,标注方法时表示将特定的URL映射到指定的方法。
@RequestBody
@RequestBody 注解一般用来处理非Content-Type: application/x-www-form-urlencoded编码格式的数据,在GET请求中没有请求体所以一般不适用,在post请求中必须指定Content-Type后才能使用它,如ajax请求指定发送格式为application/json。
@ResponseBody
@ResponseBody可以标注方法也可以标注类,当标注方法时表示该方法的返回值会被解析成json(字符串会不会被转换),直接写入HTTP Response Body中,视图处理器将不会将return的参数识别成路径。当它标注类时,类中所有方法的返回值都将直接返回值到页面,相当于给所有的类都加上@ResponseBody注解。
(4)注入provider接口
注意这里需要使用@Reference,是这个包下的com.alibaba.dubbo.config.annotation.Reference;
需要引入dubbo依赖
<dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency>
五、测试
这些都做好了以后,我们可以启动服务提供者和消费者,使用postman来测试一下
好吧,写得不是很好,希望大家多提意见,多指定交流,以后再更新其他的,谢谢