SpringCloud微服务项目开发实战流程

【Java学习路线之JavaWeb】Spring Cloud教程(非常详细) 文章目录读者阅读条件微服务是什么微服务,我们可以从字面上去理解,即“微小的服务”,下面我们从“服务”和“微小”两个方面进行介绍。微服务架构微服务架构 vs 单体架构微服务的特点微服务框架Java 微服务框架Go 语言微服务框Phyton 微服务框架NodeJS微服务框架Spring Cloud是什么Spring Cloud 常用组件Spring Boot 和 Spring Cloud 的区别与联系1. Spring Boot 和 Spring Cloud 分工不同2. Spring Cloud 是基于 Sp 阅读详情

SpringCloud微服务项目实战流程

一、项目概述

1.1 项目背景

本项目是一个基于SpringCloud生态的微服务架构示例项目,旨在展示企业级微服务架构的完整开发流程。项目模拟了一个简历管理与自动投递系统,包含服务注册与发现、配置中心、API网关、服务熔断、链路追踪、消息队列等核心微服务组件。

1.2 技术栈

分类技术版本
语言Java17
框架Spring Boot2.7.6
微服务Spring Cloud2021.0.9
注册中心Eureka2021.0.9
配置中心Spring Cloud Config2021.0.9
网关Spring Cloud Gateway2021.0.9
熔断Hystrix1.5.18
链路追踪Zipkin3.6.1
消息队列Spring Cloud Stream2021.0.9
认证OAuth22.3.5.RELEASE
数据库MySQL8.0+
ORMSpring Data JPA2.7.6

1.3 模块架构

weh-resume-parent (父工程)
├── weh-service-common              # 公共模块(实体类、工具类)
├── weh-cloud-eureka-server-8761    # Eureka注册中心节点1
├── weh-cloud-eureka-server-8762    # Eureka注册中心节点2
├── weh-cloud-config-9901           # Config配置中心
├── weh-cloud-gateway-9801          # API网关
├── weh-cloud-oauth2-9701           # OAuth2认证服务
├── weh-cloud-zipkin-server-9411    # Zipkin链路追踪
├── weh-cloud-hystrix-dashboard     # Hystrix监控仪表盘
├── weh-cloud-hystrix-trubine       # Hystrix聚合监控
├── weh-cloud-stream-producer-9090  # 消息生产者
├── weh-cloud-stream-consumer-9096  # 消息消费者1
├── weh-cloud-stream-consumer-9097  # 消息消费者2
├── weh-service-resume-8080         # 简历服务实例1
├── weh-service-resume-8081         # 简历服务实例2
├── weh-service-autodeliver-8090    # 自动投递服务实例1
└── weh-service-autodeliver-8091    # 自动投递服务实例2

架构图

公共模块

数据层

监控与追踪

业务服务层

配置中心

服务注册与发现

安全鉴权层

API网关层

客户端层

自动投递服务集群

简历服务集群

消息队列层

Stream Producer
端口:9090

RabbitMQ

Stream Consumer
端口:9096

Stream Consumer
端口:9097

前端应用/移动端

Spring Cloud Gateway
端口:9801

黑名单过滤器

OAuth2认证服务
端口:9701

JWT Token验证

Eureka Server A
端口:8761

Eureka Server B
端口:8762

Spring Cloud Config
端口:9901

weh-service-resume
端口:8080

weh-service-resume
端口:8081

weh-service-autodeliver
端口:8090

weh-service-autodeliver
端口:8091

Hystrix熔断器

Ribbon负载均衡

Zipkin Server
端口:9411

Hystrix Dashboard

Turbine聚合

MySQL
resume_db

Redis
缓存

weh-service-common


层级结构

层级组件说明
客户端层前端应用/移动端面向用户的入口
API网关层Spring Cloud Gateway + 过滤器统一入口、请求路由、安全过滤
安全鉴权层OAuth2 + JWT统一认证授权、Token验证
服务注册发现Eureka双节点服务注册、健康检查、负载均衡
配置中心Spring Cloud Config集中配置管理
业务服务层简历服务、自动投递服务集群核心业务逻辑处理
消息队列层Stream Producer/Consumer + RabbitMQ异步消息处理
监控追踪层Zipkin + Hystrix Dashboard + Turbine链路追踪、熔断监控
数据层MySQL + Redis持久化存储与缓存
公共模块weh-service-common共享实体类、工具类

二、环境准备

2.1 依赖环境

依赖要求
JDK17+
Maven3.8+
MySQL8.0+
Redis6.0+(可选,用于OAuth2 token存储)

2.2 Maven配置

父工程pom.xml关键配置说明:

<!-- Spring Boot依赖管理 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>2.7.6</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

<!-- Spring Cloud依赖管理 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>2021.0.9</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

版本兼容性说明:Spring Cloud 2021.0.9 与 Spring Boot 2.7.x 配套使用,这是经过验证的稳定组合。


三、核心模块开发流程

3.1 Eureka注册中心开发

3.1.1 创建步骤

第一步:创建Module

  • 命名:weh-cloud-eureka-server-8761
  • 打包方式:jar

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

第三步:启动类开发

@SpringBootApplication
@EnableEurekaServer  // 启用Eureka服务端
public class EurekaServer8761 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer8761.class, args);
    }
}

第四步:配置文件

server:
  port: 8761
spring:
  application:
    name: weh-cloud-eureka-server

eureka:
  instance:
    hostname: WehCloudEurekaServerA
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}
  client:
    service-url:
      defaultZone: http://WehCloudEurekaServerB:8762/eureka/
    register-with-eureka: true   # 双节点互注册
    fetch-registry: true
3.1.2 双节点高可用配置

配置hosts文件(Windows: C:\Windows\System32\drivers\etc\hosts):

127.0.0.1   WehCloudEurekaServerA
127.0.0.1   WehCloudEurekaServerB

节点2配置(端口8762):

server:
  port: 8762
eureka:
  instance:
    hostname: WehCloudEurekaServerB
  client:
    service-url:
      defaultZone: http://WehCloudEurekaServerA:8761/eureka/
3.1.3 启动验证

访问地址:http://localhost:8761 和 http://localhost:8762


3.2 公共模块开发

3.2.1 创建步骤

第一步:创建Module

  • 命名:weh-service-common
  • 打包方式:jar

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
</dependencies>
3.2.2 实体类设计

Resume实体:

@Data
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "r_resume")
public class Resume {
    @Id
    private Long id;
    private String sex;
    private String birthday;
    private String workYear;
    private String phone;
    private String email;
    private String status;
    private String resumeName;
    private String name;
    private String createTime;
    private String headPic;
    private Integer isDel;
    private String updateTime;
    private Long userId;
    private Integer isDefault;
    private String highestEducation;
    private Integer deliverNearByConfirm;
    private Integer refuseCount;
    private Integer markCanInterviewCount;
    private Integer haveNoticeInterCount;
    private String oneWord;
    private String liveCity;
    private Integer resumeScore;
    private Integer userIdentity;
    private Integer isOpenResume;  // 人才搜索-开放简历状态
}

Result响应封装:

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Result<T> {
    private Integer code;
    private String message;
    private T data;
    
    public static <T> Result<T> success(T data) {
        return Result.<T>builder()
                .code(200)
                .message("success")
                .data(data)
                .build();
    }
    
    public static <T> Result<T> error(String message) {
        return Result.<T>builder()
                .code(500)
                .message(message)
                .build();
    }
}

3.3 业务服务开发(简历服务)

3.3.1 创建步骤

第一步:创建Module

  • 命名:weh-service-resume-8080

第二步:添加依赖

<dependencies>
    <!-- 公共模块 -->
    <dependency>
        <groupId>com.weh.resume</groupId>
        <artifactId>weh-service-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <!-- Eureka客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <!-- JPA -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    
    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
3.3.2 DAO层开发
public interface ResumeDao extends JpaRepository<Resume, Long> {
    /**
     * 根据用户ID查询默认简历
     */
    Resume findByUserIdAndIsDefault(Long userId, Integer isDefault);
}
3.3.3 Service层开发
// 接口
public interface ResumeService {
    Resume findDefaultResumeByUserId(Long userId);
}

// 实现类
@Service
public class ResumeServiceImpl implements ResumeService {
    
    @Autowired
    private ResumeDao resumeDao;
    
    @Override
    public Resume findDefaultResumeByUserId(Long userId) {
        return resumeDao.findByUserIdAndIsDefault(userId, 0);
    }
}
3.3.4 Controller层开发
@RestController
@RequestMapping("/resume")
public class ResumeController {
    
    @Autowired
    private ResumeService resumeService;
    
    @Value("${server.port}")
    private Integer port;
    
    @RequestMapping("/openstate/{userId}")
    public Integer findDefaultResumeState(@PathVariable Long userId) {
        // 模拟超时场景
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return port;  // 返回端口号便于观察负载均衡
    }
}
3.3.5 配置文件
server:
  port: 8080

spring:
  application:
    name: weh-service-resume
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/resume_db?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8
    username: root
    password: 123456
  jpa:
    database: MySQL
    show-sql: true
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl

eureka:
  client:
    serviceUrl:
    		# WehCloudEurekaServerA需要在本地系统中host 【WehCloudEurekaServerA对应---> 127.0.0.1】
      defaultZone: http://WehCloudEurekaServerA:8761/eureka/,http://WehCloudEurekaServerB:8762/eureka
  instance:
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${spring.application.name}:${server.port}:@project.version@

3.4 业务服务开发(自动投递服务)

3.4.1 创建步骤

第一步:创建Module

  • 命名:weh-service-autodeliver-8090

第二步:添加依赖

<dependencies>
    <!-- 公共模块 -->
    <dependency>
        <groupId>com.weh.resume</groupId>
        <artifactId>weh-service-common</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    
    <!-- Eureka客户端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    <!-- Ribbon负载均衡 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
    
    <!-- Hystrix熔断 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
</dependencies>
3.4.2 RestTemplate配置
@Configuration
public class RestTemplateConfig {
    
    @Bean
    @LoadBalanced  // 启用Ribbon负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
3.4.3 Controller层开发(含Hystrix熔断)
@RestController
@RequestMapping("/autodeliver")
@DefaultProperties(defaultFallback = "findResumeOpenStateTimeoutFallback", commandProperties = {
    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "2000"),
    @HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "8000"),
    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "2"),
    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "3000")
})
public class AutodeliverController {
    
    @Autowired
    private RestTemplate restTemplate;
    
    // 使用Ribbon负载均衡调用简历服务
    @RequestMapping("/checkState/{userId}")
    public Result<?> findResumeOpenState(@PathVariable Long userId) {
        String url = "http://weh-service-resume/resume/openstate/" + userId;
        Integer forObject = restTemplate.getForObject(url, Integer.class);
        return Result.success(forObject);
    }
    
    // 带熔断控制的方法
    @RequestMapping("/findResumeTimeout/{userId}")
    @HystrixCommand(
        threadPoolKey = "findResumeTimeout",
        threadPoolProperties = {
            @HystrixProperty(name = "coreSize", value = "1"),
            @HystrixProperty(name = "maxQueueSize", value = "20")
        }
    )
    public Result<?> findResumeTimeout(@PathVariable Long userId) {
        String url = "http://weh-service-resume/resume/openstate/" + userId;
        Integer forObject = restTemplate.getForObject(url, Integer.class);
        return Result.success(forObject);
    }
    
    // 熔断降级方法
    public Result<?> findResumeOpenStateTimeoutFallback() {
        return Result.error("服务暂时不可用,请稍后重试");
    }
}
3.4.4 启动类
@SpringBootApplication
@EnableDiscoveryClient  // 启用服务发现
@EnableCircuitBreaker   // 启用Hystrix熔断
public class ServiceAutodeliverApplication8090 {
    public static void main(String[] args) {
        SpringApplication.run(ServiceAutodeliverApplication8090.class, args);
    }
}

3.5 API网关开发

3.5.1 创建步骤

第一步:创建Module

  • 命名:weh-cloud-gateway-9801

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
</dependencies>
3.5.2 配置文件
server:
  port: 9801

spring:
  application:
    name: weh-cloud-gateway
  cloud:
    gateway:
      routes:
        # 简历服务路由
        - id: resume-service-route
          uri: lb://weh-service-resume
          predicates:
            - Path=/resume/**
        # 自动投递服务路由
        - id: autodeliver-service-route
          uri: lb://weh-service-autodeliver
          predicates:
            - Path=/autodeliver/**
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true

eureka:
  client:
    serviceUrl:
      defaultZone: http://WehCloudEurekaServerA:8761/eureka/,http://WehCloudEurekaServerB:8762/eureka
3.5.3 自定义过滤器开发
@Component
public class BlackListFilter implements GlobalFilter, Ordered {
    
    // 黑名单IP列表
    private static final List<String> BLACK_LIST = Arrays.asList("127.0.0.1");
    
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        String clientIp = exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();
        
        if (BLACK_LIST.contains(clientIp)) {
            exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);
            return exchange.getResponse().setComplete();
        }
        
        return chain.filter(exchange);
    }
    
    @Override
    public int getOrder() {
        return -1;  // 优先级最高
    }
}

3.6 OAuth2认证服务开发

3.6.1 创建步骤

第一步:创建Module

  • 命名:weh-cloud-oauth2-9701

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-oauth2</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
</dependencies>
3.6.2 用户详情服务
@Service
public class JdbcUserDetailsService implements UserDetailsService {
    
    @Autowired
    private UsersRepository usersRepository;
    
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        Users user = usersRepository.findByUsername(username);
        
        if (user == null) {
            throw new UsernameNotFoundException("用户不存在");
        }
        
        return new User(user.getUsername(), user.getPassword(), AuthorityUtils.createAuthorityList("ROLE_USER"));
    }
}
3.6.3 授权服务器配置
@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
    
    @Autowired
    private DataSource dataSource;
    
    @Autowired
    private AuthenticationManager authenticationManager;
    
    @Autowired
    private UserDetailsService userDetailsService;
    
    // 配置客户端信息存储
    @Bean
    public ClientDetailsService clientDetailsService() {
        return new JdbcClientDetailsService(dataSource);
    }
    
    // 配置token存储
    @Bean
    public TokenStore tokenStore() {
        return new JdbcTokenStore(dataSource);
    }
    
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.withClientDetails(clientDetailsService());
    }
    
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        endpoints
            .authenticationManager(authenticationManager)
            .userDetailsService(userDetailsService)
            .tokenStore(tokenStore());
    }
    
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security
            .tokenKeyAccess("permitAll()")
            .checkTokenAccess("isAuthenticated()")
            .allowFormAuthenticationForClients();
    }
}

3.7 链路追踪(Zipkin)

3.7.1 创建步骤

第一步:创建Module

  • 命名:weh-cloud-zipkin-server-9411

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>io.zipkin</groupId>
        <artifactId>zipkin-server</artifactId>
        <version>3.6.1</version>
    </dependency>
    <dependency>
        <groupId>io.zipkin</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
        <version>3.6.1</version>
    </dependency>
</dependencies>
3.7.2 启动类
@SpringBootApplication
@EnableZipkinServer
public class ZipkinServerApplication9411 {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinServerApplication9411.class, args);
    }
}
3.7.3 客户端配置(业务服务)
spring:
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1.0  # 采样率

3.8 消息队列(Spring Cloud Stream)

3.8.1 生产者开发

第一步:创建Module

  • 命名:weh-cloud-stream-producer-9090

第二步:添加依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
</dependencies>

第三步:消息发送接口

public interface MyMessageProducer {
    String OUTPUT = "myOutput";
    
    @Output(OUTPUT)
    MessageChannel output();
}

第四步:消息发送实现

@Service
public class MyMessageProducerImpl {
    
    @Autowired
    private MyMessageProducer myMessageProducer;
    
    public void sendMessage(String message) {
        myMessageProducer.output().send(MessageBuilder.withPayload(message).build());
    }
}

第五步:配置文件

server:
  port: 9090

spring:
  application:
    name: weh-cloud-stream-producer
  cloud:
    stream:
      bindings:
        myOutput:
          destination: myExchange
          content-type: application/json
3.8.2 消费者开发

第一步:创建Module

  • 命名:weh-cloud-stream-consumer-9096

第二步:消息接收服务

@Service
public class MessageConsumerService {
    
    @StreamListener("myInput")
    public void receive(String message) {
        System.out.println("消费者接收到消息: " + message);
    }
}

第三步:配置文件

server:
  port: 9096

spring:
  application:
    name: weh-cloud-stream-consumer
  cloud:
    stream:
      bindings:
        myInput:
          destination: myExchange
          content-type: application/json

四、服务启动顺序

1. Eureka Server 8761          (必须最先启动)
2. Eureka Server 8762          (双节点互注册)
3. Config Server 9901          (配置中心)
4. Zipkin Server 9411          (链路追踪)
5. OAuth2 Server 9701          (认证服务)
6. Gateway 9801                (API网关)
7. Hystrix Dashboard           (熔断监控)
8. 业务服务                    (resume、autodeliver)
9. Stream Producer/Consumer    (消息队列)

五、服务访问测试

5.1 Eureka控制台

  • http://localhost:8761
  • http://localhost:8762

5.2 简历服务

  • 直接访问: http://localhost:8080/resume/openstate/1
  • 网关访问: http://localhost:9801/resume/openstate/1

5.3 自动投递服务

  • 直接访问: http://localhost:8090/autodeliver/checkState/1
  • 网关访问: http://localhost:9801/autodeliver/checkState/1

5.4 Zipkin控制台

  • http://localhost:9411/zipkin/

5.5 Hystrix Dashboard

  • http://localhost:9000/hystrix

5.6 OAuth2获取Token

POST http://localhost:9701/oauth/token
Content-Type: application/x-www-form-urlencoded

client_id=client
client_secret=secret
grant_type=password
username=admin
password=123456

六、关键技术点总结

技术组件核心作用关键配置
Eureka服务注册与发现@EnableEurekaServer / @EnableDiscoveryClient
Ribbon客户端负载均衡@LoadBalanced + RestTemplate
Hystrix服务熔断降级@HystrixCommand + 线程池配置
GatewayAPI网关路由spring.cloud.gateway.routes
Config分布式配置中心bootstrap.yml + Git仓库
Zipkin分布式链路追踪spring.zipkin.base-url
OAuth2统一认证授权@EnableAuthorizationServer
Stream消息驱动@Output / @Input / @StreamListener

七、注意事项

  1. 端口冲突:确保各服务使用不同端口,建议按规划端口启动
  2. MySQL连接:确保MySQL服务正常运行,数据库配置正确
  3. Hosts配置:双节点Eureka需要配置hosts文件
  4. 依赖版本:Spring Cloud与Spring Boot版本必须匹配
  5. 网络环境:确保各服务间网络畅通
  6. 启动顺序:严格按照启动顺序启动服务,避免依赖问题

八、扩展建议

  1. 服务监控:集成Prometheus + Grafana进行指标监控
  2. 日志聚合:引入ELK栈进行日志收集与分析
  3. 服务网格:考虑引入Istio进行更精细的流量管理
  4. 容器化:使用Docker + Kubernetes进行服务编排
  5. 持续集成:配置Jenkins/GitLab CI进行自动化构建部署
  6. 分布式事务:引入Seata解决跨服务事务问题
SpringCloud Alibaba全套组件实战实现登陆服务较完整版 这里写目录标题前言架构图前期部署项目结构新的依赖配置文件服务端网关主启动类代码编写服务端测试 前言 接着上一节进行完善,加入Sentinel、gareway、druid及一些nacos配置,需要看上一节的朋友可以点开这里。 架构图 前期部署 项目结构 新的依赖 服务端 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId> 阅读详情

相关推荐

秒杀全网,SpringCloud微服务电商实战项目(全套源码+视频+文档)

写文章很久了,听到粉丝问的最多的问题就是:有没有新的完整的项目,因为现在很多流传的项目都太老了,实战意义不是很强。很多程序员每项技术单独拿出来有可能很厉害,例如:springcloud、springboot、redis、nginx、mysql、rabbitMq等,但是普遍缺乏将所有的这些技术整合到一起,从前端到后端,从开发到部署上线,从每个知识点到整体的设计。本次分享不是分享项目而是教你如何开发一个项目细节流程。文中资料已打包整理完毕,文末小卡片中获取项目技术栈基于springBoot2.x、springC

qq_46388795的博客 675

简单SpringCloud项目(大致的后台流程)

1.第一步先安装一个nacous注册中心,用一个简单的单机windos版本就行,也可以使用Linux下的redis集群版本,两种选择 然后在需要运行的服务器配置文件下配置指定注册中心 spring: application: #应用名称, 向注册中心注册的名称 name: GatewayServer cloud: nacos: discovery: #注册中心地址 server-addr: http://localhost:8848

weixin_48811255的博客 4657

值得收藏的一些Java实战项目分享

今天来给大家分享几个值得作为Java新手收藏实战的项目

技术专家 1万+

SpringCloud 项目搭建过程

spring cloud基本的环境搭建教程。

apmvn的博客 2880

秒杀全网!SpringCloud微服务电商实战项目(全套源码+视频+文档)

写文章很久了,听到粉丝问的最多的问题就是:有没有新的完整的项目,因为现在很多流传的项目都太老了,实战意义不是很强。很多程序员每项技术单独拿出来有可能很厉害,例如:springcloud、springboot、redis、nginx、mysql、rabbitMq等,但是普遍缺乏将所有的这些技术整合到一起,从前端到后端,从开发到部署上线,从每个知识点到整体的设计。本次分享不是分享项目而是教你如何开发一...

xingduan5153的博客 1万+

Spring Cloud Alibaba微服务架构实战教程—01实战系列教程开篇

SpringCloud-Alibaba微服务架构实战教程—01开篇SpringCloud-Alibaba微服务架构实战教程—01开篇前言技术栈 SpringCloud-Alibaba微服务架构实战教程—01开篇 此项目源自智慧城市方案中的部分需求,是一个结合SpringCloud,SpringCloudAlibaba、Dubbo等技术栈,进行的微服务实战开发案例,长达3万多字的手把手教程,图文并茂,细节到极点,基本囊括了微服务架构中常用技能点,全面覆盖微服务中各种问题的解决方案,是新手入门、初中级开发提升

空空说技术的博客 3095

SpringCloud电商项目开发完整流程

该项目是SpringCloud项目的前端后台管理方面代码

xiaoyezhiei的博客 4096

Spring Cloud 从入门到实战:全面掌握微服务开发

本专栏系统讲解Spring Cloud微服务开发,面向1-3年Java开发者。内容涵盖:基础环境搭建(含版本兼容方案)、服务注册发现(Eureka/Consul/Nacos)、分布式配置管理(Config/Nacos)、服务调用与负载均衡(OpenFeign/Ribbon)、API网关(Gateway路由与安全)等核心组件,通过理论+代码示例详解实现方法及常见问题解决方案。最后通过完整电商项目实战,整合各组件实现微服务开发全流程,包含架构设计、服务集成、安全配置及容器化部署。帮助开发者快速掌握Spring

fykam的博客 1133

SpringCloud入门教程(全集)

SpringCloud所有常见组件介绍及使用示例

tttalk的博客 9万+

适合新手入门的springcloud完整项目资源,附带sql和详细的开发文档,可直接导入运行。

本资源是SpringCloud项目,附带一份详细介绍SpringCloud开发过程讲解内容pdf文档。可直接导入运行,适合新手入门学习。

统信UOS专业版服务器无人值守安装

(2)、专业版:主要针对整机厂商、政府单位、事业单位和企业用户使用,cpu目前支持x86、arm、mips、sw64和LoogngArch架构,试用期免费获得90天的使用,随后需要单位采购授权,获得正式激活码后才可以正常使用。其中企业版代号为d,行业版为a/c,欧拉版则为e,在最近的更新中,c版已经停止更新迭代,后续行业版本将都为a版,版本代号体现在镜像名字中以及版本号上,例如1050d则表示企业版1050版本。UOS系统服务器版本分为:专业版(d版)、行业版(a版)、欧拉版(e版)

靠谱运维 2251

SpringCloud 微服务开发笔记

新建filters包,MyGlobalFilter类@Component@Override//获取请求//放行@Override//过滤器执行顺序,越小优先级越高return 0;要保证自定义的过滤器在 NettyRoutingFilter 之前执行,要实现 Ordered 接口一般情况下自定义 GlobalFilter 即可,自定义 GatewayFilter仅作了解涉及到工厂模式(读取配置类)和装饰模式(设置order)

cutlery1137的博客 192

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2121

微服务,软件应用开发的新纪元

微服务,软件应用开发的新纪元 2014年 Martin Fowler 在《MicroServices》论文中首次提出了微服务的概念。近些年,伴随着互联网的日益发展,微服务在国内、甚至国际上的发展已达到一个新高潮。 在微服务流行之前,SOA(Service Oriented Architecture)被广泛熟知与采用。微服务基于 SOA 发展而来,但与之相比,微服务更易于理解,也更利于设计者、开...

chengjunming123的博客 294

Qt Design Studio 入门指南:从零开始打造炫酷UI(详细+实用+轻松上手)

本文是Qt Design Studio的详细入门指南,旨在帮助UI设计新手从零开始轻松打造炫酷界面。文章系统介绍了软件的核心概念、安装步骤、主界面解析,并通过创建一个完整的登录界面实例,手把手教学如何拖拽组件、设置属性、添加交互状态与动画。同时,分享了创建自定义组件、管理资源以及提升效率的实用技巧与常见问题解决方案,让读者能够快速上手并应用于实际项目开发。

devops8pract的博客 588

Databricks Genie:语义编译器架构与企业级智能解析实践

语义层是现代数据平台实现自然语言查询的核心基础,其本质是将业务术语映射为可执行、可治理的数据契约。原理上依赖结构化元数据、值字典与数据血缘三支柱协同,通过分层AI代理(如Intent Parsing、Retriever、Verifier)实现意图识别→语义对齐→安全执行的闭环。技术价值在于降低SQL使用门槛的同时保障审计性、一致性和权限可控性,适用于销售运营、财务分析等一线业务场景。本文深入解析Databricks Genie作为典型语义编译器的落地逻辑,涵盖Unity Catalog知识注入、七层Agen

weixin_29053695的博客 337

这份可以瞬杀全部springcloud微服务电商实战项目文档,吊打阿里

项目源码项目教程文档(500页)工具清单。

the shy 178

电子货架标签应用浅析(ESL)

​【 关注与分享,是对原创最大的鼓励 】 年底了,会断续介绍几个主要的BLE的应用及市场情况,这篇文章介绍的是电子货架标签, ESL (Electronic Shelf Label)。 文章将从应用简介,市场规模,产业链,头部玩家及系统框架进行介绍。只对技术感兴趣的可以直接拉到底。 ESL简介 ESL,是一种显示产品,其主要是替代传统的纸质标签,应用于大型商超,...

iotthings的博客 4691

SpringCloud零基础学全栈,实战企业级项目完整使用

本项目以SpringCloudAlibaba生态为核心,整合Nacos、Sentinel、Seata、RocketMQ等主流中间件,构建高可用、可扩展的微服务架构。通过真实业务场景的拆解与实现,带你掌握微服务从设计到落地的全流程,成为能独立开发、优化复杂系统的技术高手。 实战三个企业级别的项目,可以完全成为全全栈开发、覆盖Docker,k8s 容器运维自动化部署教

小坏说Java,一个专注Java微服务架构的实战,Java全栈教程,SpringBoot, SpringCloud微服务到分布式、高并发架构,大数据开发,运维实战,K8S、Docker容器为一体的教程,结合企业级内部的技术栈学习 1600

程序员应用AI大模型创业实现财务自由的100种赚钱方案原理与实战指南

成功的 AI 创业者都遵循着 “技术 + 需求 + 变现” 的铁三角法则。记住:不是要做 “全能大模型”,而是成为某个垂直领域的 “AI 解决方案专家”。现在就开始行动:用周末 2 小时完成第一个 MVP,下周启动种子用户测试,三个月内找到可复制的盈利模式。当你实现第一个 10 万用户时,会发现财务自由的密码藏在持续迭代的每个 0.1 版本更新中。延伸思考:你的技术背景适合切入哪个细分领域?

AI天才研究院 1379

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

SAP-ABAP:BAPI_INSPOPER_RECORDRESULTS 记录检验操作结果更新检验批状态详细解析

baidu_35680696的博客 967

强的离谱!阿里人用五个模块讲明白了SpringCloud,已开源!

作为一名Java程序员如果你对微服务不了解,就会在学习或者使用的过程中觉得有点“晕”。微服务是一种面向服务的软件架构模式!我们常说,架构设计的核心是满足降本增效。该怎么理解?举个例子,微服务架构之所以能脱颖而出,正是因为它实现了 系统解耦和持续集成,有清晰的服务边界 ,很大程度上避免了“牵一发而动全身”的尴尬。它相对传统架构而言更“灵动 ” , 更能满足如今快速变化的业务需求,在降低迭代成本的同时,也会帮助团队更聚焦的提升效率。同时,SpringBoot及SpringCloud都是包含在微服务中的,你对其都

m0_73311735的博客 199

YOLOv11改进策略【模型轻量化】| 替换骨干网络为 2024轻量化网络MoblieNetV4:移动生态系统的通用模型

一、本文介绍 本文记录的是基于MobileNet V4的YOLOv11目标检测轻量化改进方法研究。MobileNet V4通过整合UIB、Mobile MQA以及优化的NAS策略,能够在在不降低性能指标的前提下,降低计算成本。本文配置了原论文中MNv4-Conv-S、MNv4-Conv-M、MNv4-Conv-L、MNv4-Hybrid-M和MNv4-Hybrid-L五种模型,以满足不同的需求。 模型 参数量 计算量 推理速度 YOLOv11m 20.0M 67.6GFLOPs 3.5ms

Limiiiing的博客 4456

【亲测免费】 探索神领物流:一款带你走进物流行业的微服务实战项目

探索神领物流:一款带你走进物流行业的微服务实战项目 物流行业,这个与日常生活紧密相连的领域,其背后的技术是如何支撑业务运行的呢?神领物流项目,就是这样一款专为开发者设计的实战平台,带你深入了解并掌握物流系统的精髓。 1、项目介绍 神领物流是一个基于微服务架构的生产级物流系统,涵盖了物流行业的典型业务场景,包括用户端、快递员端、司机端和后台管理系统。它旨在帮助新手和有经验的开发者理解物流行业的同时,...

gitblog_00004的博客 1740

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SpringCloudAlibaba电商项目实战

在昨天我们已经完成了父工程搭建和通用模块以及注册中心的搭建,那么接下来我们继续完成 资料:云盘连接 提取码:er6t 在云盘中将基础结构代码直接下载,并解压,通过idea打开 这里每一个模块都是微服务模块,对应的都是对于数据库中表的增删改查操作,这里我有必要说一点 每一个启动类上,都是通过通用mapper对包进行了扫描,并且每一个实体类都有相应数据库的表与字段的关系映射。 也就是说,通过通...

qq_45455361的博客 4479

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: 基于SpringBoot和Dubbo的分布式服务架构实现服务远程调用
下一篇: 简单介绍Spring Cloud Alibaba 微服务项目的开发流程
IT_WEH_coder
博客等级 码龄5年 2万+粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_WEH_coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值