0

0

使用 Spring Boot 构建您的第一个微服务系统:初学者指南

PHPz

PHPz

发布时间:2024-08-13 08:53:13

|

643人浏览过

|

来源于dev.to

转载

使用 spring boot 构建您的第一个微服务系统:初学者指南

介绍

在本指南中,我们将逐步介绍如何使用 spring boot 创建一个简单而全面的微服务系统。我们将介绍微服务的基础知识,设置所需的环境,并实现两个微服务:orderservice 和 inventoryservice。此外,我们将使用 eureka 和 api 网关集成服务发现来管理服务之间的路由。

什么是微服务?

微服务是一种软件架构风格,其中应用程序被构建为协同工作的小型独立服务的集合。每个服务都是独立的,并通过明确定义的 api 与其他服务进行通信,使系统更加灵活、可扩展且更易于管理。

系统架构

我们系统的架构将由两个微服务组成:orderservice 和 inventoryservice。 orderservice 将使用关系数据库 (mysql) 来存储订单详细信息,而 inventoryservice 将使用 nosql 数据库 (mongodb) 来管理库存数据。我们还将使用 eureka 实现服务发现,并使用 api 网关来路由请求。

项目设置

在开始之前,请确保您已安装以下工具:

  • ideintellij idea(首选)或 eclipse
  • jdk:版本 17 或更高版本
  • 构建工具:maven
  • 数据库:mysql 和 mongodb

微服务一:订单服务

第 1 步:初始化项目

  1. 转到 spring initializr。
  2. 填写项目详情:
    • 项目:maven 项目
    • 语言:java
    • spring boot:2.5.7(或兼容版本)
    • 群组:com.ordersystem
    • 神器:订单服务
    • 名称:订单服务
    • 包名: com.ordersystem.orderservice
    • 包装:罐装
    • java:17
  3. 添加以下依赖:
    • 春天网
    • spring 数据 jpa
    • mysql 驱动程序
    • 龙目岛
  4. 点击生成下载项目。解压下载的 zip 文件并在 ide 中打开它。

第 2 步:配置应用程序

打开 src/main/resources 中的 application.properties 文件,添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/orderservice
spring.datasource.username=root
spring.datasource.password=yourpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.driver
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.mysql8dialect
server.port=8081

第 3 步:实施模型

在src/main/java/com/ordersystem/orderservice/model/order.java中创建order实体类:

package com.ordersystem.orderservice.model;

import lombok.allargsconstructor;
import lombok.data;
import lombok.noargsconstructor;

import javax.persistence.*;

@data
@allargsconstructor
@noargsconstructor
@entity
@table(name = "orders")
public class order {
    @id
    @generatedvalue(strategy = generationtype.identity)
    private long id;
    private string product;
    private int quantity;
    private double price;
}

第 4 步:创建存储库

在 src/main/java/com/ordersystem/orderservice/repository/orderrepository.java 中创建 orderrepository 接口:

package com.ordersystem.orderservice.repository;

import com.ordersystem.orderservice.model.order;
import org.springframework.data.jpa.repository.jparepository;

public interface orderrepository extends jparepository<order, long> {
}

第 5 步:实施服务

在 src/main/java/com/ordersystem/orderservice/service/orderservice.java 中创建 orderservice 类:

package com.ordersystem.orderservice.service;

import com.ordersystem.orderservice.model.order;
import com.ordersystem.orderservice.repository.orderrepository;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;

import java.util.list;

@service
public class orderservice {
    @autowired
    private orderrepository orderrepository;

    public list<order> getallorders() {
        return orderrepository.findall();
    }

    public order getorderbyid(long id) {
        return orderrepository.findbyid(id).orelse(null);
    }

    public order createorder(order order) {
        return orderrepository.save(order);
    }

    public void deleteorder(long id) {
        orderrepository.deletebyid(id);
    }
}

第 6 步:创建控制器

在 src/main/java/com/ordersystem/orderservice/controller/ordercontroller.java 中创建 ordercontroller 类:

package com.ordersystem.orderservice.controller;

import com.ordersystem.orderservice.model.order;
import com.ordersystem.orderservice.service.orderservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.*;

import java.util.list;

@restcontroller
@requestmapping("/api/orders")
public class ordercontroller {
    @autowired
    private orderservice orderservice;

    @getmapping
    public list<order> getallorders() {
        return orderservice.getallorders();
    }

    @getmapping("/{id}")
    public order getorderbyid(@pathvariable long id) {
        return orderservice.getorderbyid(id);
    }

    @postmapping
    public order createorder(@requestbody order order) {
        return orderservice.createorder(order);
    }

    @deletemapping("/{id}")
    public void deleteorder(@pathvariable long id) {
        orderservice.deleteorder(id);
    }
}

微服务2:库存服务

第 1 步:初始化项目

  1. 转到 spring initializr。
  2. 填写项目详情:
    • 项目:maven 项目
    • 语言:java
    • spring boot:2.5.7(或兼容版本)
    • 群组:com.ordersystem
    • artifact:库存服务
    • 名称:库存服务
    • 包名: com.ordersystem.inventoryservice
    • 包装:罐装
    • java:17
  3. 添加以下依赖:
    • 春天网
    • spring data mongodb
    • 龙目岛
  4. 点击生成下载项目。解压下载的 zip 文件并在 ide 中打开它。

第 2 步:配置应用程序

打开 src/main/resources 中的 application.properties 文件,添加以下配置:

spring.data.mongodb.uri=mongodb://localhost:27017/inventoryservice
server.port=8082

第 3 步:实施模型

在src/main/java/com/ordersystem/inventoryservice/model/inventoryitem.java中创建inventoryitem实体类:

package com.ordersystem.inventoryservice.model;

import lombok.allargsconstructor;
import lombok.data;
import lombok.noargsconstructor;
import org.springframework.data.annotation.id;
import org.springframework.data.mongodb.core.mapping.document;

@data
@allargsconstructor
@noargsconstructor
@document(collection = "inventory")
public class inventoryitem {
    @id
    private string id;
    private string product;
    private int quantity;
}

第 4 步:创建存储库

在 src/main/java/com/ordersystem/inventoryservice/repository/inventoryrepository.java 中创建 inventoryrepository 接口:

PathFinder
PathFinder

AI驱动的销售漏斗分析工具

下载
package com.ordersystem.inventoryservice.repository;

import com.ordersystem.inventoryservice.model.inventoryitem;
import org.springframework.data.mongodb.repository.mongorepository;

public interface inventoryrepository extends mongorepository<inventoryitem, string> {
}

第 5 步:实施服务

在 src/main/java/com/ordersystem/inventoryservice/service/inventoryservice.java 中创建 inventoryservice 类:

package com.ordersystem.inventoryservice.service;

import com.ordersystem.inventoryservice.model.inventoryitem;
import com.ordersystem.inventoryservice.repository.inventoryrepository;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.service;

import java.util.list;

@service
public class inventoryservice {
    @autowired
    private inventoryrepository inventoryrepository;

    public list<inventoryitem> getallitems() {
        return inventoryrepository.findall();
    }

    public inventoryitem getitembyid(string id) {
        return inventoryrepository.findbyid(id).orelse(null);
    }

    public inventoryitem createitem(inventoryitem item) {
        return inventoryrepository.save(item);
    }

    public void deleteitem(string id) {
        inventoryrepository.deletebyid(id);
    }
}

第 6 步:创建控制器

在 src/main/java/com/ordersystem/inventoryservice/controller/inventorycontroller.java 中创建 inventorycontroller 类:

package com.ordersystem.inventoryservice.controller;

import com.ordersystem.inventoryservice.model.inventoryitem;
import com.ordersystem.inventoryservice.service.inventoryservice;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.web.bind.annotation.*;

import java.util.list;

@restcontroller
@requestmapping("/api/inventory")
public class inventorycontroller {
    @autowired
    private inventoryservice inventoryservice;

    @getmapping
    public list<inventoryitem> getallitems() {
        return inventoryservice.getallitems();
    }

    @getmapping("/{id}")
    public inventoryitem getitembyid(@pathvariable string id) {
        return inventoryservice.getitembyid(id);
    }

    @postmapping
    public inventoryitem createitem(@requestbody inventoryitem item) {
        return inventoryservice.createitem(item);
    }

    @deletemapping("/{id}")
    public void deleteitem(@pathvariable string id) {
        inventoryservice.delete

item(id);
    }
}

使用 eureka 进行服务发现

第1步:初始化eureka服务器

  1. 转到 spring initializr。
  2. 填写项目详情:
    • 项目:maven 项目
    • 语言:java
    • spring boot:2.5.7(或兼容版本)
    • 群组:com.ordersystem
    • 神器:尤里卡服务器
    • 名称:尤里卡服务器
    • 包名: com.ordersystem.eurekaserver
    • 包装:罐装
    • java:17
  3. 添加eureka server依赖。
  4. 点击生成下载项目。解压下载的 zip 文件并在 ide 中打开它。

第2步:配置eureka服务器

打开 src/main/resources 中的 application.properties 文件,添加以下配置:

server.port=8761
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

第三步:启用eureka服务器

在 src/main/java/com/ordersystem/eurekaserver/eurekaserverapplication.java 中的主应用程序类上添加 @enableeurekaserver 注释:

package com.ordersystem.eurekaserver;

import org.springframework.boot.springapplication;
import org.springframework.boot.autoconfigure.springbootapplication;
import org.springframework.cloud.netflix.eureka.server.enableeurekaserver;

@springbootapplication
@enableeurekaserver
public class eurekaserverapplication {
    public static void main(string[] args) {
        springapplication.run(eurekaserverapplication.class, args);
    }
}

将服务与 eureka 集成

为 orderservice 和 inventoryservice 添加 eureka 客户端依赖:

<dependency>
    <groupid>org.springframework.cloud</groupid>
    <artifactid>spring-cloud-starter-netflix-eureka-client</artifactid>
</dependency>

在application.properties文件中添加eureka客户端配置:

订购服务:

eureka.client.service-url.defaultzone=http://localhost:8761/eureka/
spring.application.name=order-service

库存服务:

eureka.client.service-url.defaultzone=http://localhost:8761/eureka/
spring.application.name=inventory-service

api网关

步骤一:初始化api网关

  1. 转到 spring initializr。
  2. 填写项目详情:
    • 项目:maven 项目
    • 语言:java
    • spring boot:2.5.7(或兼容版本)
    • 群组:com.ordersystem
    • 神器:api 网关
    • 名称:api网关
    • 包名: com.ordersystem.apigateway
    • 包装:罐装
    • java:17
  3. 添加 gatewayeureka discovery client 依赖项。
  4. 点击生成下载项目。解压下载的 zip 文件并在 ide 中打开它。

步骤2:配置api网关

打开 src/main/resources 中的 application.yml 文件,添加以下配置:

server:
  port: 8080

spring:
  application:
    name: api-gateway
  cloud:
    gateway:
      routes:
        - id: order-service
          uri: lb://order-service
          predicates:
            - path=/api/orders/**
        - id: inventory-service
          uri: lb://inventory-service
          predicates:
            - path=/api/inventory/**

eureka:
  client:
    service-url:
      defaultzone: http://localhost:8761/eureka/

步骤 3:启用发现客户端

在 src/main/java/com/ordersystem/apigateway/apigatewayapplication.java 中的主应用程序类上使用 @enablediscoveryclient 进行注释:

package com.ordersystem.apigateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

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

测试微服务

  1. 启动 eureka server:运行 eureka server 应用程序。
  2. 启动订单服务:运行订单服务应用程序。
  3. 启动库存服务:运行库存服务应用程序。
  4. 启动 api gateway:运行 api gateway 应用程序。

使用 postman 或任何其他 api 客户端通过 api 网关测试端点:

  • 创建订单:post http://localhost:8080/api/orders
  • 获取订单:get http://localhost:8080/api/orders
  • 创建库存商品:post http://localhost:8080/api/inventory
  • 获取库存物品:get http://localhost:8080/api/inventory

结论

在本指南中,我们使用 spring boot 构建了一个简单的微服务系统。我们创建了两个微服务(orderservice 和 inventoryservice),将服务发现与 eureka 集成,并设置 api 网关用于路由请求。这种架构允许可扩展且可维护的微服务,可以在未来轻松扩展。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

686

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

513

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

287

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

519

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

267

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

542

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

668

2023.08.14

Python异步编程与Asyncio高并发应用实践
Python异步编程与Asyncio高并发应用实践

本专题围绕 Python 异步编程模型展开,深入讲解 Asyncio 框架的核心原理与应用实践。内容包括事件循环机制、协程任务调度、异步 IO 处理以及并发任务管理策略。通过构建高并发网络请求与异步数据处理案例,帮助开发者掌握 Python 在高并发场景中的高效开发方法,并提升系统资源利用率与整体运行性能。

37

2026.03.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 850人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号