dubbo 初体验 2 boot 篇
上一章,我们使用了 dubbo 的基础模式来做 rpc 通讯,但是在日常中的 java 开发并不会直接使用 spring 而是通过 springboot 来间接的使用 dubbo 和 spring 的搭配,并且 springboot 在开发的时候可以更为快捷的调用 bean 配置我们的参数,application 的文件有提示功能在使用 idea 作为我们的开发工具的时候,所以更为受喜欢。
引入依赖
第一步当然是引入我们的依赖,这里我们使用的版本是目前比较新的版本,3.2.14 具体的版本信息可以直接到官网去查看 (maven reposition)[https://mvnrepository.com/\] 对于技术我还是日常尝鲜可以使用最新的,追求最新最高级的技术,生产开发以稳为主
xml
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.14</version>
</dependency>
配置文件
之前的 spring 和 dubbo 的基础版本我们是直接使用的 xml 的方式作为配置文件这里我们使用的 springboot 的提供的 yaml 的配置方式,
服务端配置
yaml
spring:
application:
name: dubbo-rpc-boot-provider
dubbo:
application:
qos-enable: true
protocol:
port: 20880
name: dubbo
客户端配置
yaml
spring:
application:
name: dubbo-rpc-boot-provider
dubbo:
protocol:
name: dubbo
port: -1
application:
qos-enable: false
具体的功能和实现
具体功能为,服务端的是功能的实现和暴露,客户端的为实现远程代理并且访问服务端得到响应的内容
服务端
java
package com.rpc.dubbo.service;
import com.rpc.dubbo.entity.Hello;
import org.apache.dubbo.config.annotation.DubboService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* @author xl-9527
* @since 2024/12/27
**/
@Service
@DubboService
public class HelloServiceImpl implements HelloService {
private final Logger log = LoggerFactory.getLogger(HelloServiceImpl.class);
@Override
public Boolean hello(final Hello hello) {
log.info("hello 接口调用 value -> {}, username -> {}", hello.getValue(), hello.getUsername());
return Boolean.TRUE;
}
}
客户端
java
package com.rpc.dubbo.stub;
import com.alibaba.fastjson2.JSON;
import com.rpc.dubbo.entity.Hello;
import com.rpc.dubbo.service.HelloService;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Service;
/**
* @author xl-9527
* @since 2024/12/29
**/
@Slf4j
@Service
public class HelloServiceStub implements InitializingBean {
@DubboReference(url = "dubbo://172.29.32.1:20880/com.rpc.dubbo.service.HelloService?serializable=fastjson2")
private HelloService helloService;
@Override
public void afterPropertiesSet() throws Exception {
Boolean hello = helloService.hello(new Hello("hello", "xl-9527"));
log.info("hello 接口调用 -> {}", JSON.toJSONString(hello));
}
}
总结
相对于使用 xml 的使用更为简单方便,但是虽然从 xml 标签改变为注解的方式,但是差不多是没有太大变化的都是 server 或者 reference 的名词。使用上其实并没有太多的区别,都是通过 spring 来注入我们的代理类,然后和服务端做交互