OJ在线评测系统 微服务 OpenFeign调整后端下 nacos注册中心配置 不给前端调用的代码 全局引入负载均衡器

发布于:2024-10-08 ⋅ 阅读:(7) ⋅ 点赞:(0)

OpenFeign内部调用二

4.修改各业务服务的调用代码为feignClient

开启nacos注册 把Client变成bean

该服务仅内部调用,不是给前端的

将某个服务标记为“内部调用”的目的主要有以下几个方面:

  1. 安全性: 内部API通常不对外部用户公开,这样可以防止未授权的访问。通过限制只允许内部服务调用,可以降低潜在的安全风险。

  2. 服务架构: 在微服务架构中,服务之间的通信往往是通过内部API进行的。这种设计使得各个服务能相互协作,同时避免了直接暴露给外部的复杂性。

  3. 性能优化: 内部调用通常可以优化网络请求,例如使用轻量级的通信协议(如gRPC或HTTP/2),而不是传统的RESTful API,这样可以提高性能。

  4. 版本控制: 内部API可以独立于外部API进行版本控制,使得内部服务能够在不影响外部用户的情况下进行更新和迭代。

  5. 简化开发: 开发人员可以在内部API中使用更复杂的逻辑和数据结构,而不需要考虑外部用户的兼容性问题。

  6. 监控与日志: 内部调用可以更方便地进行监控和日志记录,以便于分析和调试内部服务之间的交互。

通过这些措施,可以确保系统的稳定性和安全性,同时提升开发效率和服务可维护性。

编写服务的实现类 注意要和之前定义的客户端保持一致

这服务只是内部调用的

package com.yupi.yuojbackenduserservice.controller.inner;

import com.yupi.yuojbackendmodel.model.entity.User;
import com.yupi.yuojbackendserviceclient.service.UserFeignClient;
import com.yupi.yuojbackenduserservice.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;

/**
 * 该服务仅内部调用,不是给前端的
 */
@RestController
@RequestMapping("/inner")
public class UserInnerController implements UserFeignClient {

    @Resource
    private UserService userService;

    /**
     * 根据 id 获取用户
     * @param userId
     * @return
     */
    @Override
    @GetMapping("/get/id")
    public User getById(@RequestParam("userId") long userId) {
        return userService.getById(userId);
    }

    /**
     * 根据 id 获取用户列表
     * @param idList
     * @return
     */
    @Override
    @GetMapping("/get/ids")
    public List<User> listByIds(@RequestParam("idList") Collection<Long> idList) {
        return userService.listByIds(idList);
    }

}

什么时候用Client呢

5.开启nacos的配置 让服务互相发现

注册配置中心

现在所有服务引入依赖

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

每个服务都配置一下

是针对 Spring Cloud 使用 Nacos 作为服务发现的设置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

给项目启动类打上注解

开启服务发现

找到对应客户端Bean的位置

这边建议的是给每个服务都加上

@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.yupi.yuojbackendserviceclient.service"})

全局要引入负载均衡器依赖

主要功能包括:

  1. 客户端负载均衡:根据策略(如轮询、随机等)将请求分发到不同的服务实例。

  2. 与 Spring Cloud 生态系统的集成:可以与其他 Spring Cloud 组件(如 Eureka、Consul 等)一起使用,以实现服务发现和负载均衡。

  3. 自定义负载均衡策略:支持用户定义自己的负载均衡算法。

使用场景:

  • 在微服务架构中,多个服务实例提供相同的功能时,可以通过负载均衡器将请求合理分配到这些实例上,以提高可用性和性能。

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
            <version>3.1.5</version>
        </dependency>

注册中心有响应


网站公告

今日签到

点亮在社区的每一天
去签到