微服务框架(二)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官方文档
相关文章
|
11天前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
30 2
|
17天前
|
XML JSON API
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
75 3
|
28天前
|
Java Maven Docker
gitlab-ci 集成 k3s 部署spring boot 应用
gitlab-ci 集成 k3s 部署spring boot 应用
|
5天前
|
Java 程序员 API
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
22 1
|
14天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
算法 API Apache
Flink CDC:新一代实时数据集成框架
本文源自阿里云实时计算团队 Apache Flink Committer 任庆盛在 Apache Asia CommunityOverCode 2024 的分享,涵盖 Flink CDC 的概念、版本历程、内部实现及社区未来规划。Flink CDC 是一种基于数据库日志的 CDC 技术实现的数据集成框架,能高效完成全量和增量数据的实时同步。自 2020 年以来,Flink CDC 经过多次迭代,已成为功能强大的实时数据集成工具,支持多种数据库和数据湖仓系统。未来将进一步扩展生态并提升稳定性。
499 1
Flink CDC:新一代实时数据集成框架
|
18天前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
39 1
|
1月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
176 11
|
18天前
|
Java Spring
springboot 学习十一:Spring Boot 优雅的集成 Lombok
这篇文章是关于如何在Spring Boot项目中集成Lombok,以简化JavaBean的编写,避免冗余代码,并提供了相关的配置步骤和常用注解的介绍。
62 0
|
18天前
|
开发框架 监控 搜索推荐
GoFly快速开发框架集成ZincSearch全文搜索引擎 - Elasticsearch轻量级替代为ZincSearch全文搜索引擎
本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。