这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
Dubbo Spring Boot框架介绍
Apache Dubbo™ 是一款高性能Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。现在Dubbo被很多大公司所使用,是非常流行的Java RPC框架。
Dubbo Spring Boot 是一个开源的Dubbo在Spring Boot上配置的框架。
它实现了Dubbo在Spring Boot中的自动装配,注解驱动,安全, 健康检查, 外部化配置等功能。
Dubbo Spring Boot 的Maven配置:
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tntxia.study</groupId>
<artifactId>dubbo-provider</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring-boot.version>2.3.0.RELEASE</spring-boot.version>
<dubbo.version>2.7.8</dubbo.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Apache Dubbo -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!-- Dubbo Spring Boot Starter -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>
复制代码
通常情况 , Dubbo 应用有两种使用场景 , 其一为 Dubbo 服务提供方 , 另外一个是 Dubbo 服务消费方。
首先,我们假设存在一个 Dubbo RPC API ,由服务提供方为服务消费方暴露接口 :
public interface IUserService {
void add(String name);
}
复制代码
实现 Dubbo 服务提供方
1. 实现 IUserService
接口
package com.tntxia.study.dubbo.service.impl;
import org.apache.dubbo.config.annotation.DubboService;
import com.tntxia.study.dubbo.service.IUserService;
@DubboService(version = "1.0.0")
public class UserServiceImpl implements IUserService {
@Override
public void add(String name) {
System.out.println("add user");
}
}
复制代码
我们可以看到实现接口的方法后,我们只需要加一个@DubboService标签就可以声明这是一个Dubbo Service的实现了。
2. 配置服务提供方的接入信息
spring.application.name=user-service-provider
dubbo.scan.base-packages=com.tntxia.study.dubbo.service
# Dubbo Protocol
dubbo.protocol.name=dubbo
dubbo.protocol.port=12345
## Dubbo Registry
dubbo.registry.address=N/A
复制代码
这里我们配置了Dubbo服务提供方的应用名,组件扫描路径,协议,端口,还有注册地址。
3. Dubbo服务提供方的启动类
package com.tntxia.study.dubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
复制代码
这里Application其实就是一个普通的Spring Boot启动类,不需要额外的标签和代码。
配置完后,启动这个Application,后台会打印:
从后台打印结果,可以看出IUserService已经导出成Dubbo对外的服务了,接下来,我们就可以写服务消费方来使用这个服务了。
实现 Dubbo 服务消费方
1. 首先,我们先配置应用名称,没有配置的话,可能会报错。
配置 application.yml
spring:
application:
name: user-service-consumer
复制代码
2. 接下来,我们可以下调用IUserService的代码了。
package com.tntxia.study.dubbo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import com.tntxia.study.dubbo.service.IUserService;
@EnableAutoConfiguration
public class DubboAutoConfigurationConsumerBootstrap {
private final Logger logger = LoggerFactory.getLogger(getClass());
@DubboReference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
private IUserService userService;
public static void main(String[] args) {
SpringApplication.run(DubboAutoConfigurationConsumerBootstrap.class).close();
}
@Bean
public ApplicationRunner runner() {
return args -> {
userService.add("Jim");;
};
}
}
复制代码
运行这个代码后,服务端的后台可以显示出我们要打印的信息:
说明服务消费方成功的调用了Dubbo服务提供方的代码,Dubbo的功能在Spring Boot实现了。
总结
Spring Boot是基于Spring的强大的一站式框架,使用Dubbo Spring Boot,我们可以把Dubbo和Spring Boot整合起来,是Dubbo的使用更加容易和高效。
近期评论