EDAS: Spring Boot 开发 Dubbo 应用

简介: 开发环境:InteliJ IDEA COMMUNITY操作系统 :macOS Mojave注册中心:为了便于本地开发,本教程使用 EDAS 提供的轻量级配置中心,轻量级配置中心包含了 EDAS 服务注册中心的基本功能。

开发环境:InteliJ IDEA COMMUNITY

操作系统 :macOS Mojave

注册中心:为了便于本地开发,本教程使用 EDAS 提供的轻量级配置中心,轻量级配置中心包含了 EDAS 服务注册中心的基本功能。


1. 注册中心安装与配置


轻量级配置中心配置及使用请单独参考:轻量级配置中心

验证配置中心是否可以正常使用:

打开浏览器,在地址栏输入 jmenv.tbsite.net:8080,回车,可看到轻量配置中心首页。


f63b2066297bcaa6c3dc67c081e022cf8d87e34d

bd31854b500a5b32b9c53ce042a9c8a1a337a551

61ecf3a5814033508ef611af3be36b154c25fe8d

cb47a648ea87ba67e67f2221c200023b13ffabc2


2. 创建 dubbo-provider


【File】->【New】->【Project】->【maven】->【Next】-> 自定义输入GroupId, ArtifactId

a. 主要依赖: Spring Boot 2.0.6.RELEASE(starter-web, actuator),dubbo-spring-boot-starter (0.2.0),edas-dubbo-extension (1.0.1)

<?xml version="1.0" encoding="UTF-8"?>
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.alibaba.edas.boot</groupId>
    <artifactId>dubbo-boot-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.0.6.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.edas</groupId>
            <artifactId>edas-dubbo-extension</artifactId>
            <version>1.0.1</version>
        </dependency>
    </dependencies>

</project>


b. 创建接口及方法

6c8e557ee8b5af7285034e8391a64f0355df5d2e

创建示例:IEatService,提供方法:eatFood()

package me.gary.edas.boot;

public interface IEatService {
    String eatFood(String str);
}


c. 实现该接口方法

package me.gary.edas.boot;

import com.alibaba.dubbo.config.annotation.Service;

@Service
public class EatServiceImpl implements IEatService {
    public String eatFood(String name) {
        return "Please eat " + name + " (from Dubbo with Spring Boot)";
    }
}

d. 配置 dubbo 服务

src/main/resources 路径下创建 application.properties


dubbo.scan.basePackages: 接口服务实现类,@Service 注解所在的 package,若有多个,用逗号隔开

dubbo.registry.address: 前文提到的,本地已配置运行的轻量配置中心地址


 
 
# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages=me.gary.edas.boot
dubbo.application.name=dubbo-provider-springboot
dubbo.registry.address=edas://127.0.0.1:8080


e. 开发 SpringBoot 入口类,并启动

package me.gary.edas.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DubboProvider {
    public static void main(String[] args) {
        SpringApplication.run(DubboProvider.class, args);
    }
}


48d01e9cdc3cffa7bad4a9f20d5891238ae8611d


35.gif35.gif35.gif spring boot 的 tomcat 启动失败!!"address already in use"。回忆一下,轻量注册中心是不是已经启动了8080的web页面啊?是的。


f. 修改 spring boot 配置,指定端口为非8080端口,本示例使用8081。

最终,application.properties 配置如下:

# Base packages to scan Dubbo Components (e.g @Service , @Reference)
dubbo.scan.basePackages=me.gary.edas.boot
dubbo.application.name=dubbo-provider-springboot
dubbo.registry.address=edas://127.0.0.1:8080
server.port=8081


“Tomcat started on port(s): 8081 (http) with context path ''”,消费者在指定8081端口成功运行。

1176d2459cbc2d12737f6299443c489ed387bca7


打开“jmenv.tbsite.net:8080”,

c8acefd249665635150e285166c0c2005dc0eec1


可以看到服务提供者里已经包含了com.alibaba.edas.boot.IEatService,且可以看到该服务的服务分组和提供者 IP。


3. 创建 dubbo-consumer


a. pom 依赖配置,同 provider

b. 创建接口及方法,同 provider

c. 此项目调用以 Controller 方式为例,创建 ConsumerController


package me.gary.edas.boot;

import com.alibaba.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ConsumerController {

    @Reference
    private IEatService eatService;

    @RequestMapping("/eatFood/{food}")
    public String eatFood(@PathVariable String food) {
        return eatService.eatFood(food);
    }
}

d. 配置 dubbo 服务

src/main/resources 路径下创建 application.properties


特别注意:同样,别忘记了 provider 中出现的问题。spring boot 默认在8080端口启动 tomcat,此例 consumer 分配8082。

dubbo.application.name=dubbo-consumer-springboot
dubbo.registry.address=edas://127.0.0.1:8080
server.port=8082

e. 开发 SpringBoot 入口类,并启动

package me.gary.edas.boot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DubboConsumer {
    public static void main(String[] args) {
        SpringApplication.run(DubboConsumer.class, args);
    }
}

017767fce2ccd402071ce9cd9834a604f9ab7790


422d6c4fd199dd860d8d3bcaa6a35f0699e8e43b


通过配置中心页面,可以看到服务调用者 com.alibaba.edas.boot.IEatService 已经注册成功。


f. 通过 Consumer  暴露的 RESTful 接口,调用 provider 的 eatFood() 接口。


本例 Consumer 注册端口为:8082,读者需根据 application.properties 中指定的端口,修改以下指令。

curl http://localhost:8082/eatFood/apple


caf88ea321d87f28618b4989fed721989b1cddff


Yay! RESTful 接口 --> consumer --> provider,该流程验证通过。




相关实践学习
微服务实战-服务注册中心 - Nacos
Nacos是阿里巴巴于2018年7月发布的一个开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 支持几乎所有主流类型的服务的发现、配置和管理: Kubernetes Service&nbsp; gRPC &amp; Dubbo RPC Service&nbsp; Spring Cloud RESTful Service &nbsp;
目录
相关文章
|
9月前
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1323 3
|
8月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
771 0
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
756 7
|
7月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
594 8
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
9月前
|
Java 应用服务中间件 开发者
Spring Boot 技术详解与应用实践
本文档旨在全面介绍 Spring Boot 这一广泛应用于现代企业级应用开发的框架。内容将涵盖 Spring Boot 的核心概念、核心特性、项目自动生成与结构解析、基础功能实现(如 RESTful API、数据访问)、配置管理以及最终的构建与部署。通过本文档,读者将能够理解 Spring Boot 如何简化 Spring 应用的初始搭建和开发过程,并掌握其基本使用方法。
648 2
|
9月前
|
人工智能 监控 安全
如何快速上手【Spring AOP】?核心应用实战(上篇)
哈喽大家好吖~欢迎来到Spring AOP系列教程的上篇 - 应用篇。在本篇,我们将专注于Spring AOP的实际应用,通过具体的代码示例和场景分析,帮助大家掌握AOP的使用方法和技巧。而在后续的下篇中,我们将深入探讨Spring AOP的实现原理和底层机制。 AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架中的核心特性之一,它能够帮助我们解决横切关注点(如日志记录、性能统计、安全控制、事务管理等)的问题,提高代码的模块化程度和复用性。
|
9月前
|
安全 算法 Java
在Spring Boot中应用Jasypt以加密配置信息。
通过以上步骤,可以在Spring Boot应用中有效地利用Jasypt对配置信息进行加密,这样即使配置文件被泄露,其中的敏感信息也不会直接暴露给攻击者。这是一种在不牺牲操作复杂度的情况下提升应用安全性的简便方法。
1448 10
|
10月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
924 13
|
10月前
|
NoSQL Java Redis
Redis基本数据类型及Spring Data Redis应用
Redis 是开源高性能键值对数据库,支持 String、Hash、List、Set、Sorted Set 等数据结构,适用于缓存、消息队列、排行榜等场景。具备高性能、原子操作及丰富功能,是分布式系统核心组件。
757 2