4.Spring Cloud构建微服务架构(四)服务消费者

Springcloud集成RocketMQ,实现生产者和消费者案例 整合springcloud,实现生产和消费 案例实现如何携带Key和Tag的方式,请参考 阅读详情

负载均衡

​ spring cloud 体系中,我们知道服务之间的调用是通过http协议进行调用的。注册中心就是维护这些调用的服务的各个服务列表。在Spring中提供了RestTemplate,用于访问Rest服务的客户端,Spring Cloud体系中也是使用RestTemplate进行服务之间的调用。

​ 负载均衡(Load Balance),通常指将请求分摊到各个操作单元上进行处理,精髓在于均衡,也就是平均。负载均衡在我们日常开发中也是经常听到的,下面介绍几种常见的负载均衡技术实现。

  1. Nginx

    ​ Nginx是我们平时使用的较多的负载均衡技术实现,性能也是很不错。一个http请求请求至Nginx服务器,Nginx服务器根据请求和一定的算法将请求转发至真正的服务器,以达到负载均衡的目的。至于Nginx里面具体的负载均衡算法,了解过Nginx的人应该会比较熟悉,没了解过的请自己去看吧。

  2. DNS解析

    ​ 在DNS服务器上配置多个域名对应ip的记录,一个域名可以对应多组的ip地址。DNS服务器在解析域名时根据相应的算法,把通过域名的请求分配到合适的真实服务器上去。这样也可以达到一定的负载均衡,不至于一个服务器的压力过大。

RestTemplate

我们先看下官方是怎么定义的:

Synchronous client to perform HTTP requests, exposing a simple, template method API over underlying HTTP client libraries such as the JDK HttpURLConnection, Apache HttpComponents, and others. The RestTemplate offers templates for common scenarios by HTTP method, in addition to the generalized exchange and execute methods that support of less frequent cases.

​ 我们可以看到,RestTemplate采用的是同步方式执行Http请求的类,底层使用的是JDK的HttpURLConnection或者Apache的HttpComponents的类库,或者其他的类库。RestTemplate还提供了模版使得开发人员能够更简单发送Http请求。

​ RestTemplate中定义了很多和Rest资源交互的API,下面就介绍2个我们平时常用的GET和POST请求,在RestTemplate中是怎么请求的。

GET请求:

RequestEntity requestEntity = RequestEntity.get(new URI(uri)).build();
ResponseEntity<User> responseEntity2 = this.restTemplate.exchange(requestEntity, User.class);

exchage是一个通用的请求方法,接受一个RequestEntity对象,可以设置路径,请求头,请求信息等。最后返回一个ResponeseEntity实体。

当然GET请求也可以是getForEntity()和getForObject()2中类型:

//getForEntity()
ResponseEntity<User> responseEntity = this.restTemplate.getForEntity(uri, User.class);
User user = responseEntity.getBody();
//getForObject()
User user = this.restTemplate.getForObject(uri, User.class);

POST请求:

HttpEntity<MultiValueMap> request = new HttpEntity<>(map, header);    ResponseEntity<String> exchangeResult = restTemplate.exchange(url, HttpMethod.POST, request, String.class);

map中存放post的数据,header里存放请求头相关的信息,最后返回一个ResponeseEntity实体类。

同样的,POST请求也是有着对应的getForObject()和getForEntity()类型:

//postForObject()
User user = this.restTemplate.postForObject(uri, user, User.class);
//postForEntity()
ResponseEntity<User> responseEntity = this.restTemplate.postForEntity(uri, user, User.class);

请他的请求,也是类似,这里就不在此列举了,感兴趣的可以查看RestTesmplate的api

Ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的客户端负载均衡组件。区别于Nginx的服务端负载均衡的实现。在结合Spring Cloud Eureka组件使用时,ribbonServerList会被重写,改为通过Eureka的注册中心来获取服务列表,可以通过简单的几行配置来实现客户端的负载均衡。

接下来我们来使用Spring Cloud Ribbon来实现客户端的负载均衡

提前项目准备:

1.Eureka:首先我们先启动一个Eureka 服务端作为注册中心
2.然后开启2个服务,注册到Eureka服务中去,我这里开启了2个oauth服务注册到Eureka服务端中
3.开始构建具有负载均衡功能的服务消费方apiGateWay

​ 这里使用apiGateWay作为服务消费方的原因是我们应用一般都是需要权限管理,验证登录用户的,这里apiGateWay通过调用oauth应用服务来验证用户的合法性。

  1. 首先添加依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-ribbon</artifactId>
    </dependency>
    
  2. 启用服务发现客户端

    这里apiGateWay作为服务消费方,就相当于http请求过程充当了客户端的角色,被调用的服务就是服务端。先在客户端的启动类中声明要使用的RestTemplate

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableZuulProxy
    @Slf4j
    public class ApiGatewayApplication {
        public static void main(String[] args){
            SpringApplication.run(ApiGatewayApplication.class);
            log.info("ApiGatewayApplication启动");
        }
    
        @Bean
        @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
  3. 编写测试类

    @RestController
    @Slf4j
    public class RibbonClient {
        @Autowired
        RestTemplate restTemplate;
    
        @GetMapping("/demo")
        public String ribbonClientDemo(String paramName){
            log.info("请求参数paramName:{}",paramName);
            return restTemplate.getForObject("http://oauth/demo?paramName="+paramName,String.class);
        }
    }
    
  4. 启动应用,访问http://localhost:38763/demo?paramName=demo

    请求的端口是:38765
    或者是
    请求的端口是:38764
    

    然后我们多次发起请求,看被调用的服务的日志,可以发现请求确实被均匀的分配到开启的2个服务的。

    oauth(端口:38764)

    请求的参数是:demo
    serverPort:38764
    

    oauth(端口:38765)

    请求的参数是:demo
    serverPort:38765
    

    可以看到,2个服务被轮询调用。Ribbon默认的均衡策略是以轮询的方式去选择服务器。

    1.RandomRule:随机选取负载均衡策略,随机Random对象,在所有服务实例中随机找一个服务的索引号,然后从上线的服务中获取对应的服务。
    2.RoundRobinRule:线性轮询负载均衡策略。
    3.WeightedResponseTimeRule:响应时间作为选取权重的负载均衡策略,根据平均响应时间计算所有服务的权重,响应时间越短的服务权重越大,被选中的概率越高。刚启动时,如果统计信息不足,则使用线性轮询策略,等信息足够时,再切换到WeightedResponseTimeRule。
    4.RetryRule:使用线性轮询策略获取服务,如果获取失败则在指定时间内重试,重新获取可用服务。
    5.ClientConfigEnabledRoundRobinRule:默认通过线性轮询策略选取服务。通过继承该类,并且对choose方法进行重写,可以实现更多的策略,继承后保底使用RoundRobinRule策略。
    6.BestAvailableRule:继承自ClientConfigEnabledRoundRobinRule。从所有没有断开的服务中,选取到目前为止请求数量最小的服务。
    7.PredicateBasedRule:抽象类,提供一个choose方法的模板,通过调用AbstractServerPredicate实现类的过滤方法来过滤出目标的服务,再通过轮询方法选出一个服务。
    8.AvailabilityFilteringRule:按可用性进行过滤服务的负载均衡策略,会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数超过阈值的服务,然后对剩余的服务列表进行线性轮询。
    9.ZoneAvoidanceRule:本身没有重写choose方法,用的还是抽象父类PredicateBasedRule的choose。
    

    如果没有符合我们业务需求的,那么我们也可以根据业务需求自己实现一个IRule。可以通过继承AbstractLoadBalancerRule来实现我们自己的负载均衡算法:

    @Slf4j
    public class MyRule extends AbstractLoadBalancerRule {
    
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig){
    
        }
    
        /**
         * 自定义均衡策略
         * 这里简单实现返回列表的第一个服务
         */
        @Override
        public Server choose(Object o) {
            log.info("key:" + o);
          	//获取服务列表
            List<Server> allServers = getLoadBalancer().getAllServers();
            log.info(allServers.toString());
            return allServers.get(0);
        }
    }
    

    我们通过实现choose方法来实现我们自己的负载均衡算法。getLoadBalancer().getAllServers()可以获取到所有的服务信息,然后我们可以根据自己的策略来确定选择哪一个服务器。

    自定义策略之后呢,我们需要在服务调用方添加一个注解配置@FeignClient+配置类来修改spring cloud的默认配置。

    首先启动类上添加注解:

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableZuulProxy
    @Slf4j
    @FeignClient(value = "oauth",configuration = RuleConfig.class)
    public class ApiGatewayApplication {
        public static void main(String[] args){
            SpringApplication.run(ApiGatewayApplication.class);
            log.info("ApiGatewayApplication启动");
        }
    
        @Bean
        @LoadBalanced
        RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    

    然后创建RuleConfig类来把策略修改为我们刚刚实现的策略:

    @Configuration
    public class RuleConfig {
        @Bean
        public IRule ribbonRule() {
            return new MyRule();
        }
    }
    

    重新启动应用,然后我们在发起请求,就会发现这次请求就只会转发给同一个服务,也就是server列表里的第一个服务,而不在是轮询的进行请求。

    然后可以看到MyRule类打印的日志:

    请求参数paramName:demo
    key:default
    [192.168.3.2:38764, 192.168.3.2:38765]
    

    服务列表中依旧是2个服务在运行,但请求通过我们自定义的策略,永远只会发送给第一个服务,而不会转发给第二个服务。

    当然我们也可以通过配置文件配置,这就自己去研究吧。。。

feign

我们先来看下官网是怎么定义的:

Feign is a declarative web service client. It makes writing web service clients easier. To use Feign create an interface and annotate it. It has pluggable annotation support including Feign annotations and JAX-RS annotations. Feign also supports pluggable encoders and decoders. Spring Cloud adds support for Spring MVC annotations and for using the same HttpMessageConverters used by default in Spring Web. Spring Cloud integrates Ribbon and Eureka to provide a load balanced http client when using Feign.

Feign是一个声明示的Http客户端,它是的写Http客户端更加简单。它只需要通过注解相应的接口就可以实现,虽然通过上面的Ribbon里介绍的也可以创建Http客户端发起请求,但不是那么的优雅,Feign是NetFlix开发的声明式、模块式的HTTP客户端,可以帮助我们更好的、更快的开发调用HTTP API。

Feign应用

  1. 首先在工程中加入相应的依赖:

    <!-- feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  2. 然后添加配置文件:

    server.port=38763
    spring.application.name=api-gateway
    spring.cloud.config.discovery.enabled=true
    spring.cloud.config.discovery.service-id=config-server
    spring.cloud.config.profile=@package.environment@
    eureka.client.service-url.defaultZone=http://localhost:38761/eureka/
    
  3. 创建启动类,添加注解@EnableFeignClients,开启Feign支持:

    @SpringBootApplication
    @EnableDiscoveryClient
    @EnableZuulProxy
    @Slf4j
    @EnableFeignClients
    public class ApiGatewayApplication {
        public static void main(String[] args){
            SpringApplication.run(ApiGatewayApplication.class);
            log.info("ApiGatewayApplication启动");
        }
    }
    
  4. 创建一个接口类IOauthClient,加入注解@FeignClient来指定这个接口要调用的服务的名称

    //使用@FeignClient注解来指定要调用的服务名称,即注册到eureka里的服务名称
    @FeignClient(name = "oauth")
    public interface IOauthClient {
    
        /**
         * value 指定要调用的接口
         * method 指定调用的方式是 GET、POST、PUT、DELETE等
         * @RequestParam 指定要传入的参数
         */
        @RequestMapping(value = "/demo",method = RequestMethod.GET)
        public String demo(@RequestParam("paramName") String paramName);
    }
    
  5. 然后在业务需要的地方调用该接口

    @RestController
    @Slf4j
    public class DemoController {
    
        @Autowired
        IOauthClient iOauthClient;
    
        @GetMapping("/demo")
        public String demo(String paramName){
            log.info("请求参数为:{}",paramName);
            return iOauthClient.demo(paramName);
        }
    }
    
  6. 启动应用,然后发起请求

    然后我们就可以看到页面上请求的返回值:

    请求的端口是:38764
    

    是不是和前面讲Ribbon一样的,不过这种实现方式是不是和前面的方式更加优雅呢?尤其是在调用的接口变多之后,这种实现方式是不是更加简单?

  7. 注意

    这里使用Feign的时候,需要注意的问题:

    1.GET请求多个参数的时候,需要使用@RequestParam

    2.POST请求使用@RequestBody注解参数

参考资料

  • https://projects.spring.io/spring-cloud/spring-cloud.html#spring-cloud-feign
  • https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-ribbon.html

欢迎关注我的公众号

本文由博客群发一文多发等运营工具平台 OpenWrite 发布

Spring Cloud微服务功能及其组件详细讲解 微服务是一种架构风格,它强调将大型复杂的系统功能根据业务需求切分为一系列小型、独立的服务。每个服务都专注于满足某个具体的业务需求,并且能够独立部署、运行和扩展。这种架构风格使得系统更加灵活、可维护,并且能够更好地应对业务变化和技术挑战。虽然微服务在初始阶段可能会增加开发和维护的难度,因为它要求团队具备更高的分布式系统开发和运维能力。但是,从长远来看,微服务带来的好处是显而易见的。它使得系统更加易于扩展,因为每个服务都可以独立地进行水平扩展,以满足不断增长的业务需求。 阅读详情

相关推荐

深入理解Spring Cloud:构建高效微服务架构的利器

Spring Cloud是构建微服务架构的强大工具集,基于Spring Boot开发,提供了服务注册与发现、负载均衡、API网关等核心功能。本文介绍了其核心组件:1)Eureka实现服务注册与发现;2)Feign+Ribbon处理服务调用;3)Hystrix实现服务熔断降级。通过代码示例展示了如何搭建Eureka服务注册中心、使用Feign声明式调用服务,以及利用Hystrix实现服务容错。这些组件协同工作,帮助开发者构建高可用、可扩展的分布式系统。

ly1379223878的博客 1255

Ribbon源码PredicateBasedRule解读

一 PredicateBasedRule在类图中的位置 二 PredicateBasedRule源码解读 //抽象策略,继承自ClientConfigEnabledRoundRobinRule //基于Predicate的策略 //Predicateshi Google Guava Collection工具对集合进行过滤的条件接口 public abstract class Predic...

实践求真知 2488

Spring Cloud微服务架构深度解析

Bean// 权重响应时间策略。

KBkongbaiKB的博客 1132

SpringCloud笔记(五)-构建消费者模块

本文所记录的构建消费者模块,仅为SpringCloud学习视频中的项目,主要让大家对未使用SpringCloud 相关组件时,对多个子模块间调用有个大体认识,为后续微服务项目学习铺垫基础,并没有严格的对服务进行细分等。

_修铁路的、的博客 470

Spring Cloud Stream:构建消息驱动的微服务应用

Spring Cloud Stream是用于构建消息驱动的的微服务程序的框架。Spring Cloud Stream以Spring Boot为基础,可以构建独立的、生产级别的Spring应用程序。它通过Spring Integration可以支持多种消息中间件,并且屏蔽了不同消息中间件的底层操作,可以用同种方式来操作不同的消息中间件,同时引入了持久的发布-订阅、消费者组和分区的概念。

m0_64132144的博客 928

Spring Cloud 微服务分布式架构 Nacos 作为注册中心实现服务的注册及发现

Spring Cloud 微服务分布式架构 Nacos 作为注册中心实现服务的注册及发现 文章目录Spring Cloud 微服务分布式架构 Nacos 作为注册中心实现服务的注册及发现前言一、什么是Nacos?二、 Nacos架构部分会详细介绍。1.架构图2.Nacos 生态图二、SpringCloud 整合 Nacos架构实现服务注册1.创建Nacos配置服务2.创建provide:服务提供者3.创建consumer:服务消费者4.测试启动项目1、启动成功后,在日志中应该可以看到如下两条信息2、登录Na

zhx__的博客 3725

手把手教你搭建SpringCloud项目(二)生产者与消费者

项目版本 技术 版本 cloud Hoxton.SR1 boot 2.2.2.RELEASE cloud alibaba 2.1.0.RELEASE java java8 Maven 3.5及以上 Mysql 5.7及以上 搭建生产者微服务模块 步骤: 建module 改pom 写yml 主启动 业务类 1.建立支付module: cloud-provider-payment8001 项目结构: 2.pom.xml如下: <?xml version="1.

〆、挽风的博客 1623

Java领域Spring Cloud的微服务架构演进

本部分旨在全面阐述Java领域中Spring Cloud微服务架构的演进历程。范围涵盖了从微服务架构概念的兴起,到Spring Cloud如何逐步发展并成为微服务开发的主流框架,以及各个发展阶段的关键特性、技术原理和实际应用。通过深入分析,帮助开发者更好地理解Spring Cloud微服务架构的发展脉络,掌握不同阶段的技术要点,以便在实际项目中做出更合理的技术选型和架构设计。本文将按照以下结构进行阐述:首先介绍核心概念与联系,包括微服务架构和Spring Cloud的基本概念以及它们之间的关系;

AI开发架构师 1057

RestTemplate 用法详解

RestTemplate 是从 Spring3.0 开始支持的一个 HTTP 请求工具,也有的称之为网络框架,说白了就是Java版本的一个postman。专门用于在Java当中服务与服务之间远程调用接口的时候用。类似的还有Apache 的 HttpClient 以及OKHttp3,都是Java当中常用的HTTP 请求工具。关于HttpClient用法:https://blog.csdn.net/weixin_43888891/article/details/121974543RestTemplate优点:官

怪咖@的博客 7292

基于Spring Cloud的微服务架构

2017年,随着微服务架构越来越流行,各大公司纷纷开始尝试基于Spring Cloud微服务框架进行应用的开发和架构设计。服务治理统一化:基于Spring Boot的自动配置,使得服务注册与发现等过程统一化,无需再关心复杂的配置项;声明式RESTful调用方式:通过注解的方式,实现了服务间通信的简单化,不用再编写繁琐的API接口文档;基于消息的异步通信机制:支持多种消息队列中间件,比如RabbitMQ、Kafka等,通过异步发送和接收消息,实现微服务之间的高性能通信;

AI天才研究院 1163

构建微服务架构:Spring Boot、Spring Cloud与Feign实战

Spring Boot由Pivotal团队提供,旨在简化Spring应用的初始搭建以及开发过程。它使用“约定优于配置”的原则,提供一系列大型项目中常见的默认配置,以减少开发者的配置工作。定义一个服务接口使用注解指定服务的名称,然后定义调用远程服务的方法:在调用远程服务时,可以通过注入这个接口的方式,像调用本地方法一样调用远程服务:@Service@Autowired以上代码定义了一个名为的接口,通过注解指定远程服务的名称,并在接口中定义了一个请求远程服务。

weixin_36059856的博客 710

Spring Cloud微服务架构

符合"云"理念的大趋势-Spring Clund分布式服务治理的框架

每天都要开心呀(#^.^#) 2万+

Spring Cloud 微服务架构全栈演示

Spring Cloud作为一套微服务架构下的解决方案,提供了一系列工具来简化分布式系统的开发与管理。Spring Cloud构建于Spring Boot之上,使得开发者能够快速构建基于微服务的应用程序。随着微服务架构的普及,服务间调用的复杂性呈指数级增长。一个用户请求往往涉及到多个服务的协作,这导致了在出现问题时难以定位问题的根源。传统的日志记录方式已经不再适应这种复杂的分布式环境,因此,分布式追踪系统的出现变得至关重要。

weixin_28809949的博客 1030

Spring Boot 与 Spring Cloud:构建微服务应用的最佳组合

Spring Boot 提供了快速构建单个服务的能力,而 Spring Cloud 通过丰富的工具集成支持微服务架构。 Spring Boot 和 Spring Cloud 是构建分布式系统的黄金组合,适合企业级应用开发。 在实践中,要关注微服务的健壮性、性能优化以及团队协作。

一名热衷于技术的全栈开发者,专注于前端与后端的全面技术探索。在这里,我将分享我在技术领域的学习与成长,助力更多开发者的进步。 1210

从零到一:R与RStudio的安装与配置全攻略

本文提供了R与RStudio的完整安装与配置指南,涵盖Windows、Mac和Linux三大操作系统。从基础环境搭建到高级性能优化,详细介绍了R语言安装、RStudio配置、项目管理和实用技巧,帮助数据科学初学者快速搭建高效的分析工作环境。

weixin_29062671的博客 419

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展,带操作系统FreeRTOS)

【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展) 文章目录【开源】STM32+ESP8266+MQTT多传感器数据上云OneNET(易拓展)1. 相关连接1.1 本项目相关连接1.2 无操作系统简易版(旧版,有OneNET云平台设备创建和应用配置,本文不再赘述):2. 具体功能3. 硬件环境4. 云平台环境配置5. 接线6. 功能展示6.1 数据流6.2 APP应用管理6.3 串口数据7. 源码详解7.1 源码文件解析7.2 服务器与wifi配置相关7.3 源码框架7.4

ssssadw的博客 2万+

Java 微服务架构:使用 Spring Cloud 构建分布式系统

微服务架构是一种将单个应用程序拆分为多个小型、独立、可部署服务的架构风格。这些服务围绕业务能力进行组织,每个服务都有自己独立的数据库、业务逻辑和用户界面,并且可以独立地进行开发、测试、部署和扩展。独立性:每个微服务都是一个独立的单元,可以独立开发、部署和扩展,服务之间的耦合度较低。可扩展性:可以根据业务需求对单个微服务进行水平扩展,而无需对整个系统进行大规模改造。i技术多样性:不同的微服务可以根据业务需求选择最适合的技术栈,提高开发效率。容错性。

数字魔方操控师的博客 1220

保姆级教程:在Davinci Configurator里配置BswM的ECU状态机(附状态切换流程图)

本文提供了一份详细的AUTOSAR BswM模块配置指南,通过Davinci Configurator工具实现ECU状态机的构建与管理。内容涵盖从模式请求端口创建到状态切换规则定义的全流程,特别针对Ecu State Handling进行了深入解析,并附有状态切换流程图,帮助汽车电子工程师高效完成ECU状态管理配置。

weixin_28366475的博客 410

Java微服务07-Spring Cloud Stream:构建事件驱动架构

Spring Cloud Stream是Spring生态中用于构建事件驱动微服务的框架,通过抽象消息中间件差异提供统一编程模型。本文系统介绍了事件驱动架构的核心概念、优势及其与微服务的结合,对比了主流事件驱动框架特性。深入解析了Spring Cloud Stream的核心组件(绑定器、通道、消息处理器)及其分层架构设计,支持包括RabbitMQ、Kafka等多种消息中间件。通过RabbitMQ实例演示了开发流程,涵盖环境准备、消息生产/消费实现及配置要点,为开发者提供构建松耦合、高弹性分布式系统的实践指导。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

HUAWEI华为荣耀MagicBook MateBook B D E X 13 14 16 笔记本MateStation台式机原装Win10出厂Windows11系统

HUAWEI华为MateBookX原装出厂系统恢复原厂系统,型号:MACHC-WAE9LP、EUL-W29P、MACHR-W19L、MACHR-W29、MACHD-WFE9、MRGF-16、MACHR-W19BL、MACHD-WFE9Q、WT-W19、Mach-W19、Mach-W29、WT-W09、WT-W19、MACH-W29等。HUAWEI华为MateBookE原装出厂系统恢复原厂系统,型号:PAK-AL09、GK-W7X、GK-G58、GK-W76、DRC-W76等。

QQ17855069的博客 17万+

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

《Spring Cloud 微服务架构探秘》

《Spring Cloud 微服务架构探秘》

1497

【2023年】云计算比赛——金砖挑战赛正式题

文章摘要 本文详细记录了OpenStack私有云平台与Kubernetes容器云平台的部署与运维过程,涵盖环境初始化、组件安装、服务配置及自动化运维等关键任务。主要内容包括: OpenStack部署 环境初始化(主机名、Yum源、FTP服务等) 核心组件安装(Keystone、Glance、Nova、Neutron等) 运维任务(安全组管理、镜像上传、存储服务配置等) Kubernetes集群搭建 节点配置(时间同步、免密登录) 容器运行时(Docker)与网络插件(Flannel)部署 Harbor私有仓

geekgold的博客 313

深入解析Spring Cloud五大组件:构建微服务架构的核心利器

Eureka是Netflix开源的服务发现组件,Spring Cloud将其集成到自己的生态系统中,作为服务注册与发现的核心组件。Eureka分为Eureka Server和Eureka Client两部分。:服务注册中心,负责管理所有服务的注册与发现。:服务提供者和消费者,通过Eureka Server进行服务的注册与发现。Ribbon是Netflix开源的客户端负载均衡器,Spring Cloud将其集成到自己的生态系统中。Ribbon可以与Eureka配合使用,实现服务调用的负载均衡。

weixin_50552218的博客 4195

数据挖掘实战-基于长短期记忆网络(LSTM)的黄金价格预测模型 | 97% 准确度

本实验基于Kaggle上提供的从2013年到2023年的黄金价格数据集,运用长短期记忆网络(LSTM)构建了黄金价格预测模型。该数据集详细记录了每日的黄金价格信息,包括开盘价、收盘价、高点、低点和交易量等,为模型的训练提供了丰富的数据支持。

m0_64336780的博客 1万+

Oracle EBS 中美国销售税的实现方式

Oracle EBS通过eBTax引擎实现美国销售税管理,需配置税务管辖区、税率及规则等要素,基于收货地址和商品分类计税。系统支持免税交易和使用税处理,但因美国税率复杂多变,建议集成Vertex等第三方服务自动更新税率。关键配置包括创建USSales Tax制度、维护地点层级及物料税务分类,同时需管理客户免税证书。对于跨国业务,系统也支持欧盟VAT等其他国家税制配置。

金牌架构师 296
上一篇: ubuntu16.04下chrome安装flash插件
下一篇: spring-cloud-oauth2 实现用户认证及单点登录
工程师小哥
博客等级 码龄10年 4粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值