java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringCloud负载均衡

Alibaba SpringCloud集成Nacos、openFeign实现负载均衡的解决方案

作者:korgs

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案,此项目包含开发分布式应用微服务的必需组件,这篇文章主要介绍了Alibaba SpringCloud集成Nacos、openFeign实现负载均衡,需要的朋友可以参考下

Spring cloud alibaba

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

主要功能

功能组件

springboot集成

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>2023.0.0.1-RC2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

OpenFeign

OpenFeign(简称Feign)是一个声明式的Web服务客户端,用于简化服务之间的HTTP通信。它是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端,内置了Ribbon来做客户端负载均衡,以调用服务注册中心的服务。

主要特性

OpenFeign的工作方式是声明式接口编程,开发者可以定义一个接口,并对其进行注解,以标识需要调用的远程服务的HTTP端点。借助Spring MVC的注解,如@RequestMapping和@PathVariable等,这个接口直观地映射了远程服务的API。OpenFeign自动处理请求的发送和响应的接收,封装了编码请求和解码响应的过程,极大地减少了样板代码。

总之,OpenFeign是一个功能强大的Web服务客户端,可以方便地实现服务间的HTTP通信,并且与Spring Cloud无缝集成,为微服务架构提供了良好的支持。

Nacos安装

因为后面会经常用到nacos,所以最好先安装好了。

安装

export JAVA_HOME = /Users/liudong/Library/Java/JavaVirtualMachines/openjdk-21.0.1/Contents/Home

开启授权

防止出现登陆失败,修改nacos配置,如下:

nacos.core.auth.system.type=nacos
nacos.core.auth.enabled=true
###设置服务端验证 key
nacos.core.auth.server.identity.key=test
nacos.core.auth.server.identity.value=test
### The default token (Base64 String):
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789

启动

sh startup.sh -m standalone ,然后可以通过 http://127.0.0.1:8848/nacos 地址访问。

授权验证

### 获取 accessToken:使用用户名和密码登陆 nacos server:
curl -X POST '127.0.0.1:8848/nacos/v1/auth/login' -d 'username=nacos&password=nacos'
### 使用 accessToken 请求 nacos api 接口:
curl -X GET '127.0.0.1:8848/nacos/v1/cs/configs?accessToken=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJuYWNvcyIsImV4cCI6MTYwNTYyMzkyM30.O-s2yWfDSUZ7Svd3Vs7jy9tsfDNHs1SuebJB4KlNY8Q&dataId=nacos.example.1&group=nacos_group'

配置mysql数据库

这是可选的,默认采用了内置的Derby数据库,配置了mysql更有利于数据共享和操作。

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

alibaba-nacos-server provider模块

在这里插入图片描述

pom.xml

依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义

    <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

application.properties配置

spring.profiles.active = dev
spring.application.name=AlibabaSpringbootNacosServer
server.port=19501
management.endpoints.web.exposure.include=*
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.fail-fast=true
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos

application-server2.properties配置

spring.application.name=AlibabaSpringbootNacosServer
server.port=19502
management.endpoints.web.exposure.include=*
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.fail-fast=true
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
#springboot Server
spring.aop.auto=true
spring.aop.proxy-target-class=true
# log4j
logging.config=classpath:log4j2.xml
logging.level.root=INFO
logging.level.org.springframework.web=ERROR
#restful Server
server.compression.enabled=true
server.compression.mime-types=application/json,application/octet-stream
#swagger
springdoc.api-docs.enabled=true
springdoc.api-docs.path=/api-schema
swagger-config.group = default-group
swagger-config.description= The following is a restful-api list of {} application, and you can browse or test them to determine if they are working as you expect.
swagger-config.version=V1.0
swagger-config.urlPattern=/**
swagger-config.base-package=com.korgs
swagger-config.authorization-key-name=token
swagger-config.wiki = https://korgs.blog.csdn.net/

SpringbootApplication启动类

@Slf4j
@SpringBootApplication(scanBasePackages = {"com.korgs",  "cn.hutool.extra.spring"})
@Configuration
@EnableConfigurationProperties
@ServletComponentScan
@RestController
@EnableDiscoveryClient
public class AlibabaSpringbootNacosServerApplication {
	@Value("${server.port}")
	private String serverPort;
	public static void main(String[] args) {
		SpringApplication.run(AlibabaSpringbootNacosServerApplication.class, args);
	}
	@GetMapping("/helloworld/{uuid}")
	public BaseResponse<String> helloWorld(@PathVariable String uuid){
		String str = LogGenerator.trackLog()
				+ " uuid=" + uuid + " I am busy to handle this request."
				+ " serverPort=" + serverPort;
		log.info( str );
		return BaseResponse.success(str);
	}
}

springboot-openFeign-client consumer模块

在这里插入图片描述

pom.xml

依赖版本可参考 springbootSeries 模块中pom.xml文件中的版本定义

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

application.properties配置

spring.profiles.active = dev
spring.application.name=SpringbootOpenFeignClient
server.port=19506
management.endpoints.web.exposure.include=*
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.cloud.nacos.discovery.fail-fast=true
spring.cloud.nacos.username=nacos
spring.cloud.nacos.password=nacos
logging.level.com.korgs.biz.service = debug

OpenFeign Bean 实现

@Configuration
public class OpenFeignConfig {
    @Bean
    Logger.Level level() {
        return Logger.Level.FULL;
    }
}

Service服务类实现

这个类用于调用Provider的Restful接口,相比ribbon省云了定义RestTemplate这一步。但从结构上更合理了,注意添加@FeignClient注解,值为provide的注册名称。

@FeignClient(value = "AlibabaSpringbootNacosServer")
public interface LoadService {
    @GetMapping("/helloworld/{uuid}")
    BaseResponse<String> loadHelloContent(@PathVariable String uuid);
}

Controller测试类实现

@RestController
@RequestMapping("/api/load")
@RestController
@RequestMapping("/api/load")
public class LoadBalanceController {
    @Autowired
    private LoadService loadService;
    @GetMapping("/v1/hello-content")
    public BaseResponse<String> loadHelloContent(String uuid){
        return  loadService.loadHelloContent(uuid);
    }
}

SpringbootApplication启动类

@Slf4j
@SpringBootApplication(scanBasePackages = {"com.korgs",  "cn.hutool.extra.spring"})
@Configuration
@EnableConfigurationProperties
@ServletComponentScan
@RestController
@EnableDiscoveryClient
@EnableFeignClients
public class SpringbootOpenFeignClientApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootOpenFeignClientApplication.class, args);
	}
	@GetMapping("/helloworld")
	public BaseResponse helloWorld(){
		log.info( LogGenerator.trackLog()
				+ "msg=" + "I am busy to handle this request.");
		return BaseResponse.success("hello world");
	}
}

源码下载

涉及模块:

源码下载:

基础框架源码下载:

百度网盘下载:

链接: https://pan.baidu.com/s/1XUQyKdR6yDM__aJqCF-b5g?pwd=58pd

提取码: 58pd 

Alibaba SpringCloud集成Nacos、openFeign实现负载均衡

百度网盘下载:

链接: https://pan.baidu.com/s/1T-YRtfuuJq0xA4jqlWxvkQ?pwd=1gcj 
提取码: 1gcj 

参考资料:

源码运行方法:

模块详细功能说明和运行测试方法

依次启动nacos、server(两个)、client,在浏览器中输入:http://localhost:19503/swagger-ui/index.html#/open-feign-controller/loadHelloContent,观察返回字符串中端口的变化。

在这里插入图片描述

到此这篇关于Alibaba SpringCloud集成Nacos、openFeign实现负载均衡的文章就介绍到这了,更多相关SpringCloud负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文