本期小编为大家带来dubbo与spring-boot的整合,由于目前大部分项目已经使用spring-boot了,所以小编就没有在spring上做整合,同时,dubbo的jar包内置了与spring整合的包,所以不像mybatis一样需要引入mybatis-spring的整合jar包。待会儿小编会讲到
这边小编就不具体说明了,zookeeper安装配置可以看这篇博客:windows安装zookeeper教程.
这里spring-context-support就是与spring做了相关整合
dubbo 功能集合:netty: ⽤于⽹络传输,javassist: ⽤于实现动态SPI机制, snakeyaml :⽤于解析yml 配置⽂件,json:json格式化。
首先项目架构分为:
dubbo service pom 文件
<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">
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.4.3version>
<relativePath/>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>boot-serverartifactId>
<properties>
<java.version>1.8java.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>2.7.8version>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-dependencies-zookeeperartifactId>
<version>2.7.8version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12artifactId>
<groupId>org.slf4jgroupId>
exclusion>
<exclusion>
<artifactId>log4jartifactId>
<groupId>log4jgroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>compilescope>
dependency>
<dependency>
<groupId>codereadgroupId>
<artifactId>dubbo-apiartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
服务端的代码
@EnableDubbo
@SpringBootApplication
public class ServerApplication {
public static void main(String[] args) {
SpringApplication.run(ServerApplication.class,args);
}
}
@DubboService
public class UserService implements IUserService {
@Override
public UserDto getUser(Long id) {
UserDto userDto = new UserDto();
userDto.setAge(18);
userDto.setId(id);
userDto.setName("Bob");
return userDto;
}
}
application.properties
dubbo.application.name=boot-server
dubbo.protocol.name=dubbo
dubbo.protocol.port=-1
dubbo.registry.address=zookeeper://127.0.0.1:2181
服务差不多
pom 文件
<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">
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.4.3version>
<relativePath/>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>dubbo-clientartifactId>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-spring-boot-starterartifactId>
<version>2.7.8version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.4.3version>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubbo-dependencies-zookeeperartifactId>
<version>2.7.8version>
<exclusions>
<exclusion>
<artifactId>slf4j-log4j12artifactId>
<groupId>org.slf4jgroupId>
exclusion>
<exclusion>
<artifactId>log4jartifactId>
<groupId>log4jgroupId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<scope>compilescope>
dependency>
<dependency>
<groupId>com.learngroupId>
<artifactId>dubbo-apiartifactId>
<version>0.0.1-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.apache.dubbogroupId>
<artifactId>dubboartifactId>
<version>2.7.8version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>
代码
@EnableDubbo
@SpringBootApplication
public class DubboClientApplication {
public static void main(String[] args) {
SpringApplication.run(DubboClientApplication.class, args);
}
}
@RestController
@RequestMapping(value = "/user")
public class UserController {
@DubboReference
private IUserService userService;
@RequestMapping("/getUser")
public UserDto getUserById(@RequestParam("userId") Long id){
return userService.getUser(id);
}
}
application.properties
dubbo.application.name=boot-server
dubbo.protocol.name=dubbo
dubbo.protocol.port=20881
dubbo.registry.address=zookeeper://127.0.0.1:2181
server.port=8082
上面日志在启动时会报错
所以在pom文件中exclude log日志则zookeeper
Dubbo配置的整体说明:
标签 | 用途 | 解释 |
---|---|---|
公共 | ⽤于配置当前应⽤信息,不管该应⽤是提供者还是消费者 | |
公共 | ⽤于配置连接注册中⼼相关信息 | |
服务 | ⽤于配置提供服务的协议信息,协议由提供⽅指定,消费⽅被动接受 | |
服务 | ⽤于暴露⼀个服务,定义服务的元信息,⼀个服务可以⽤多个协议暴露,⼀个服务也可以注册到多个注册中⼼ | |
服务 | 当 ProtocolConfig 和 ServiceConfig 某属性没有配置时,采⽤此缺省值,可选 | |
引⽤ | 当 ReferenceConfig 某属性没有配置时,采⽤此缺省值,可选 | |
引⽤ | ⽤于创建⼀个远程服务代理,⼀个引⽤可以指向多个注册中⼼ | |
公共 | ⽤于 ServiceConfig 和 ReferenceConfig 指定⽅法级的配置信息 | |
公共 | ⽤于指定⽅法参数配置 |
配置分类 所有配置项分为三类。
配置之间关系
配置传递逻辑:
在服务中设置⼀个timeout属性,很容易让⼈误解成服务端响应超时限制,但实际该配置的作⽤是于设置消费者对该服务调⽤超时限制。就是说当超时真正发⽣的时候,只有消费才有异常,⽽服务⽅不会有反应?
@DubboService(timeout = 2000)
为会客户端的超时配置 要配置服务端呢?以及该配置参数怎么传递给客户端的呢? 原因是服务提供者 ⽐服务调⽤者更清楚 该服务的执⾏时间,所以对消费者⽽⾔这个配置有指 导意义。当然消费者本身也是可以通过设置 @DubboReference(timeout = 3000) 采⽤⾃定义的配置。参数的传递是通过服务在暴露时 放在URL上,并通过注册中⼼传递客户端。 类似这种配在服务端⽤在客户端的配置还有很多,如retries(重试次数)、async(是否异 步)、loadbalance(负载均衡)等等。
配置继承逻辑
如果需要暴露多个服务的时候,每个服务都要设置其超时时间,貌似有点繁琐。Dubbo中可 以通过
#相当于每个服务提供者设置了超时时间 和重试次数
同样客户端也有缺省配置标签:
配置的优先级
在服务端配置timeout 之后 所有客户端都会采⽤该⽅超时时间,其客户端可以⾃定义超时时间吗?通过
⼩提示:通过DefaultFuture的newFuture ⽅法就可观测到实际的超时设置。其中的timeout值 就是实际超时时间。
#创建结果回执,
org.apache.dubbo.remoting.exchange.support.DefaultFuture#newFuture(Channel channel, Request request, int timeout, ExecutorService executor)
上面小编配置小编看得很头疼,dubbo的配置还是挺鸡肋的,希望大家自己调试了。谢谢!
由于3.0文档还没生成小编使用2.7版本的dubbo的相关jar包以及参考2.7版本的官方文档
链接: Dubbo2.7官方文档。