最容易学会的springboot gralde spring cloud 多模块微服务项目

简介: 最容易学会的springboot gralde spring cloud 多模块微服务项目
Sping Cloud
服务发现组件 Eureka

Eureka Server 服务中心

Eureka Client 启动 就会注册到Server

  1. 用到的库
    spring-cloud-starter-netflix-eureka-server
    spring-cloud-starter-netflix-eureka-client
  2. 注解
    @EnableEurekaServer
    @EnableEurekaClient
  3. application.yml 配置信息
//服务端
server:
  port: 6868
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:${server.port}/eureka/
    register-with-eureka: false
    fetch-registry: false
spring:
  application:
    name: study-eureka
    //客户端

server:
  port: 8087
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:6868/eureka/
  instance:
    prefer-ip-address: true
spring:
  application:
    name: study-admin

  1. 打开网页可以看到http://localhost:6868/
Feign实现服务间的调用(默认带有负载均衡)

Feign是简化Java HTTP客户端开发的工具(java-to-httpclient-binder),它的灵感

来自于Retrofit、JAXRS-2.0和WebSocket。Feign的初衷是降低统一绑定Denominator到

HTTP API的复杂度,不区分是否为restful


  1. spring-cloud-starter-openfeign
  2. 注解

@EnableFeignClients
@EnableDiscoveryClient
创建FeignClient接口

@FeignClient(value = "study-api", fallback = ApiClientImpl.class)
@Component
public interface ApiClient {
    //, @RequestHeader(value = "token", required = false) String token
    @PostMapping(value = "/api/test")
    R<String> test(@RequestParam(value = "data") String data);
}
熔断器Hystrix
  1. 配置
 feign:
  hystrix:
    enabled: true
  1. 代码
   @Component
public class ApiClientImpl implements ApiClient {

    @Override
    public R<String> test(String data) {
        return RUtil.success("熔断器起作用了" + data);
    }
}
微服务网关Zuul

微服务网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过微服务网关,然后通过spring

-application-name 转发对应的服务

spring-cloud-starter-netflix-zuul

  1. 注解
    @EnableZuulProxy
  2. 路由转发
zuul:
  routes:
    study-api:
      path: /api/**
      serviceId: study-api
    study-admin:
      path: /admin/**
      serviceId: study-admin
  1. 过滤器
package com.ityu.studyadminzuul.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Component
public class WebFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        System.out.println("拦截器启动了");
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        if (request.getMethod().equals("OPTIONS")) {
            return null;
        }
        String url = request.getRequestURL().toString();
        if (url.indexOf("/admin/login") > 0) {
            return null;
        }

        String header = request.getHeader("token");
        if (StringUtils.isNotEmpty(header)) {
            currentContext.addZuulRequestHeader("token", header);
        } else {
            try {
                //URLDecoder.decode("xxxxx","UTF-8"); 解码 微服务获取时解码
                //在网关添加内容是编码
                currentContext.addZuulRequestHeader("token", URLEncoder.encode("没有头的信息", "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
}


集中配置组件SpringCloudConfig

config server

config client

 spring-cloud-config-server
spring-cloud-starter-config

  1. 注解
    @EnableConfigServer
    3.配置信息
 cloud:
    config:
      server:
        git:
          uri: https://gitee.com/lanlingkeji_yu.jl/srpingcloudstudyconfig.git

4.客户端配置信息 bootstrap.yml

spring:
  cloud:
    config:
      name: api
      profile: dev
      lable: master
      uri: http://127.0.0.1:12000
消息总线组件SpringCloudBus

SpringCloudBus来实现配置的自动更新


  1. spring-cloud-stream-binder-rabbit
    spring-cloud-bus
    spring-boot-starter-actuator
  2. 注解
    @RefreshScope 刷新自定义配置信息
  3. 配置
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh
  1. 客戶端也要配置 rabbitmq 信息
相关文章
|
JSON 分布式计算 大数据
springboot项目集成大数据第三方dolphinscheduler调度器
springboot项目集成大数据第三方dolphinscheduler调度器
823 3
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
1097 2
|
Java 测试技术 Spring
简单学Spring Boot | 博客项目的测试
本内容介绍了基于Spring Boot的博客项目测试实践,重点在于通过测试驱动开发(TDD)优化服务层代码,提升代码质量和功能可靠性。案例详细展示了如何为PostService类编写测试用例、运行测试并根据反馈优化功能代码,包括两次优化过程。通过TDD流程,确保每项功能经过严格验证,增强代码可维护性与系统稳定性。
451 0
|
存储 Java 数据库连接
简单学Spring Boot | 博客项目的三层架构重构
本案例通过采用三层架构(数据访问层、业务逻辑层、表现层)重构项目,解决了集中式开发导致的代码臃肿问题。各层职责清晰,结合依赖注入实现解耦,提升了系统的可维护性、可测试性和可扩展性,为后续接入真实数据库奠定基础。
895 0
|
分布式计算 大数据 Java
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
springboot项目集成大数据第三方dolphinscheduler调度器 执行/停止任务
354 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
433 0
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
Java 数据库 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——指定项目配置文件
在实际项目中,开发环境和生产环境的配置往往不同。为简化配置切换,可通过创建 `application-dev.yml` 和 `application-pro.yml` 分别管理开发与生产环境配置,如设置不同端口(8001/8002)。在 `application.yml` 中使用 `spring.profiles.active` 指定加载的配置文件,实现环境快速切换。本节还介绍了通过配置类读取参数的方法,适用于微服务场景,提升代码可维护性。课程源码可从 [Gitee](https://gitee.com/eson15/springboot_study) 下载。
812 0
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
在微服务架构中,随着业务复杂度增加,项目可能需要调用多个微服务。为避免使用`@Value`注解逐一引入配置的繁琐,可通过定义配置类(如`MicroServiceUrl`)并结合`@ConfigurationProperties`注解实现批量管理。此方法需在配置文件中设置微服务地址(如订单、用户、购物车服务),并通过`@Component`将配置类纳入Spring容器。最后,在Controller中通过`@Resource`注入配置类即可便捷使用,提升代码可维护性。
321 0
|
Java 关系型数据库 MySQL
Spring Boot项目属性配置
Spring Boot项目属性配置
334 0

热门文章

最新文章