微服务框架(二)Spring Boot 集成 Dubbo

简介:   此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为此Spring Boot通过使用起步依赖dubbo-spring-boot-starter及自动装配的方式集成Dubbo。

  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。

  本文为此Spring Boot通过使用起步依赖dubbo-spring-boot-starter及自动装配的方式集成Dubbo。

本系列文章中所使用的框架版本为Spring Boot 2.0.3-RELEASE,Spring 5.0.7-RELEASE,Dubbo 2.6.2。

Spring Boot

  Spring Boot旨在让开发人员使用最少的配置,尽可能快地着手开发并运行一个应用。Spring Boot框架从本质上来说就是Spring,但通过自动配置和起步依赖的方式将开发人员从繁重的配置中解放出来,专注于业务逻辑的实现。Spring Boot 的特性见微服务框架(一)Spring Boot + Dubbo + Docker 框架特性简述

Profile运行环境配置

  Spring Boot简化了开发人员需要的模板配置,因此我们只需要引入application.properties/application.yml即可。

在多环境配置下常使用application.properties只配置spring.profiles.active属性,以起选择对应环境的配置文件的作用

在这里插入图片描述
如上中,application.properties只需要配置spring.profiles.active = dev来选择配置文件,Spring Boot会自动加载config包下application-dev.properties的配置

在运行jar包或docker镜像时只需要设置spring.profiles.active运行变量

jar: `java -jar provider.jar --spring.profiles.active=dev`
docker: `-e "SPEING_PROFILES_ACTIVE=dev"`

Dubbo

Dubbo是一个由阿里巴巴开源的高性能、基于Java的RPC框架。与许多RPC系统一样,dubbo基于定义服务的思想,指定可以使用其参数和返回类型来远程调用的方法。在服务器端,Provider实现此接口并运行dubbo服务器来处理客户端调用。在客户端,Customer有一个提供与服务器相同的方法的存根。

  Dubbo Spring Boot 项目致力于简化 Dubbo RPC 框架在 Spring Boot 应用场景的开发。同时也整合了 Spring Boot 自动装配生产就绪的特性。

依赖引入及接口定义

Maven中引入dubbo-spring-boot-starter的起步依赖至pom.xml

<dependency>
    <groupId>com.alibaba.boot</groupId>
    <artifactId>dubbo-spring-boot-starter</artifactId>
    <version>0.2.0</version>
</dependency>

依赖关系:

版本 Java Spring Boot Dubbo
0.2.0 1.8+ 2.0.x 2.6.2+
0.1.1 1.7+ 1.5.x 2.6.2+

Dubbo RPC API:

public interface DemoService {
   
   
    String saySomething(String word);
}

Dubbo Provider

1.编写Spring Boot启动类

Dubbo的服务容器是一个 standalone 的启动程序,不需要Web容器

@SpringBootApplication
public class Starter {
   
   

    public static void main(String[] args) {
   
   
        new SpringApplicationBuilder(Starter.class)
            .web(WebApplicationType.NONE) // 非 Web 应用
            .run(args);
    }
}

2.实现DemoService接口

@Service(version = "${demo.service.version}")
public class DemoServiceImpl implements DemoService {
   
   

    @Override
    public String saySomething(String word) {
   
   
        return StringUtils.isNotEmpty(word) ? word : "Say you won't let go";
    }

}

3.spring boot配置文件

Spring Boot的自动装配及起步依赖使开发人员只需配置文件,而无需重复使用模板定义

application.properties/application.yml

# Spring boot application
spring.application.name = dubbo-provider-demo
server.port = 9090

# Service version
demo.service.version = 1.0.0

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages  = org.spring.boot.dubbo.provider

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-provider-demo
dubbo.application.name = dubbo-provider-demo

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 9900

## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://127.0.0.1:2181

注:启动消费者时需启动对应的注册中心,否则服务会启动失败

Dubbo Customer

使用Spring Boot框架构建Web应用时需引入spring-boot-starter-web的起步依赖

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

1.编写Spring Boot启动类(Web应用)

@SpringBootApplication(scanBasePackages = "org.spring.boot.dubbo.consumer.controller")
public class Starter {
   
   

    public static void main(String[] args) {
   
   
        new SpringApplicationBuilder(Starter.class)
            .web(WebApplicationType.SERVLET).run(args);
    }
}

2.通过 @Reference 注入 DemoService

下述配置中消费者为直连生产者,未经过注册中心(@Referenceurl参数若已配置则直连对应生产者,若未配置则经过配置文件中dubbo.registry.address参数连接注册中心,获取相应的生产者信息)

@RestController
public class DemoController {
   
   

    @Reference(version = "${demo.service.version}", 
                url = "dubbo://localhost:9900")
    private DemoService demoService;

    @RequestMapping("/saySomething")
    public String sayHello(@RequestParam String name) {
   
   
        return demoService.saySomething(name);
    }
}

3.spring boot配置文件

Spring Boot的自动装配及起步依赖使开发人员只需配置文件,而无需重复使用模板定义

application.properties/application.yml

# Spring boot application
spring.application.name = dubbo-consumer-demo
server.port = 9090

# Service version
demo.service.version = 1.0.0

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages  = org.spring.boot.dubbo.consumer.controller

# Dubbo Config properties
## ApplicationConfig Bean
dubbo.application.id = dubbo-consumer-demo
dubbo.application.name = dubbo-consumer-demo

## ProtocolConfig Bean
dubbo.protocol.id = dubbo
dubbo.protocol.name = dubbo
dubbo.protocol.port = 9901

## RegistryConfig Bean
dubbo.registry.id = my-registry
dubbo.registry.address = zookeeper://localhost:2181

参考资料:

  1. Dubbo Spring Boot官方文档
相关文章
|
4天前
|
监控 数据可视化 关系型数据库
微服务架构+Java+Spring Cloud +UniApp +MySql智慧工地系统源码
项目管理:项目名称、施工单位名称、项目地址、项目地址、总造价、总面积、施工准可证、开工日期、计划竣工日期、项目状态等。
52 6
|
22天前
|
Dubbo Java 应用服务中间件
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
实战指南:如何在Spring Boot中无缝整合Dubbo【四】
26 0
|
24天前
|
安全 Java 数据库
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
后端进阶之路——万字总结Spring Security与数据库集成实践(五)
|
27天前
|
Dubbo Java 应用服务中间件
Spring Boot Dubbo 构建分布式服务
Spring Boot Dubbo 构建分布式服务
34 0
|
28天前
|
NoSQL Java Redis
Spring Boot集成Redisson详细介绍
Redisson是一个用于Java的分布式和高可用的Java对象的框架,它基于Redis实现。在Spring Boot应用程序中集成Redisson可以帮助我们更轻松地实现分布式锁、分布式对象、分布式集合等功能。本文将介绍如何在Spring Boot项目中集成Redisson,并展示一些基本用法。
334 2
Spring Boot集成Redisson详细介绍
|
22天前
|
Java Nacos Maven
从零搭建微服务架构:Spring Boot与Nacos完美整合
从零搭建微服务架构:Spring Boot与Nacos完美整合
36 0
|
1月前
|
JSON Dubbo Java
微服务框架(二十)Dubbo Spring Boot 生产就绪特性
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Dubbo Spring Boot 生产就绪特性
|
8天前
|
Dubbo Java 应用服务中间件
Dubbo 第四节: Spring与Dubbo整合原理与源码分析
DubboConfigConfigurationRegistrar的主要作⽤就是对propties⽂件进⾏解析并根据不同的配置项项⽣成对应类型的Bean对象。
|
22天前
|
消息中间件 Java 开发者
Spring Cloud Stream解密:流式数据在微服务中的魔力
Spring Cloud Stream解密:流式数据在微服务中的魔力
221 1
|
22天前
|
负载均衡 监控 Dubbo
探秘Dubbo Registry:微服务架构的核心【十二】
探秘Dubbo Registry:微服务架构的核心【十二】
12 0

热门文章

最新文章

相关产品

  • 云迁移中心