微服务框架(二)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 BI
将 Spring 微服务与 BI 工具集成:最佳实践
本文探讨了 Spring 微服务与商业智能(BI)工具集成的潜力与实践。随着微服务架构和数据分析需求的增长,Spring Boot 和 Spring Cloud 提供了构建可扩展、弹性服务的框架,而 BI 工具则增强了数据可视化与实时分析能力。文章介绍了 Spring 微服务的核心概念、BI 工具在企业中的作用,并深入分析了两者集成带来的优势,如实时数据处理、个性化报告、数据聚合与安全保障。同时,文中还总结了集成过程中的最佳实践,包括事件驱动架构、集中配置管理、数据安全控制、模块化设计与持续优化策略,旨在帮助企业构建高效、智能的数据驱动系统。
299 1
将 Spring 微服务与 BI 工具集成:最佳实践
|
4月前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
389 2
|
4月前
|
存储 安全 Java
管理 Spring 微服务中的分布式会话
在微服务架构中,管理分布式会话是确保用户体验一致性和系统可扩展性的关键挑战。本文探讨了在 Spring 框架下实现分布式会话管理的多种方法,包括集中式会话存储和客户端会话存储(如 Cookie),并分析了它们的优缺点。同时,文章还涵盖了与分布式会话相关的安全考虑,如数据加密、令牌验证、安全 Cookie 政策以及服务间身份验证。此外,文中强调了分布式会话在提升系统可扩展性、增强可用性、实现数据一致性及优化资源利用方面的显著优势。通过合理选择会话管理策略,结合 Spring 提供的强大工具,开发人员可以在保证系统鲁棒性的同时,提供无缝的用户体验。
102 0
|
4月前
|
消息中间件 Java 数据库
Spring 微服务中的数据一致性:最终一致性与强一致性
本文探讨了在Spring微服务中实现数据一致性的策略,重点分析了最终一致性和强一致性的定义、优缺点及适用场景。结合Spring Boot与Spring Cloud框架,介绍了如何根据业务需求选择合适的一致性模型,并提供了实现建议,帮助开发者在分布式系统中确保数据的可靠性与同步性。
349 0
|
3月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
3月前
|
监控 Cloud Native Java
Spring Boot 3.x 微服务架构实战指南
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Spring Boot 3.x与微服务架构,探索云原生、性能优化与高可用系统设计。以代码为笔,在二进制星河中谱写极客诗篇。关注我,共赴技术星辰大海!(238字)
Spring Boot 3.x 微服务架构实战指南
|
3月前
|
负载均衡 Java API
《深入理解Spring》Spring Cloud 构建分布式系统的微服务全家桶
Spring Cloud为微服务架构提供一站式解决方案,涵盖服务注册、配置管理、负载均衡、熔断限流等核心功能,助力开发者构建高可用、易扩展的分布式系统,并持续向云原生演进。
|
3月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
210 8
|
4月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
348 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ