spring cloud 微服务部署(2025年)第二章:Nacos、LoadBalancer、GateWay、Ribbon集成之负载均衡LoadBalancer部署

【spring cloud 3.0微服务部署】第二章:Nacos、LoadBalancer、GateWay、Ribbon集成之LoadBalancer

  • 链接
    • 第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署
    • 第二章:Nacos、LoadBalancer、GateWay、Ribbon集成之负载均衡LoadBalancer部署
    • 第三章:Nacos、LoadBalancer、GateWay、Ribbon集成之网关Gateway部署
    • 第四章:Nacos、LoadBalancer、GateWay、Ribbon集成之跨服务调用ribbon
    • 查看源码
  • 正文
    • 新建顶级项目并设置父pom.xml
    • 新建二级模块,命名为MyApplications,这里存放的是所有的微服务接口,比如说权限校验auth,会员模块member,文件模块file
    • myapplication配置文件
    • 运行MyApp1Application.java MyApp2Application.java注意yml配置下的spring.application.name 与server.port要不同:

链接

第一章:Nacos、LoadBalancer、GateWay、Ribbon集成之Nacos部署

第二章:Nacos、LoadBalancer、GateWay、Ribbon集成之负载均衡LoadBalancer部署

第三章:Nacos、LoadBalancer、GateWay、Ribbon集成之网关Gateway部署

第四章:Nacos、LoadBalancer、GateWay、Ribbon集成之跨服务调用ribbon

查看源码

正文

接上章

新建顶级项目并设置父pom.xml

在这里插入图片描述

  • 删掉顶层src目录,因为这里选用父子架构
  • 最外层的pom里面,注意打包要设置 repackage,spring cloud、spring boot、spring cloud Alibaba三者要对应,具体看代码,亲测最新可用。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.que5</groupId>
  <artifactId>MyCloud</artifactId>
  <version>1.0-SNAPSHOT</version>
  <name>Archetype - MyCloud</name>
  <url>http://maven.apache.org</url>

  <!-- 项目依赖版本 -->
  <properties>
    <revision>1.0.0</revision>
    <java.version>21</java.version>
    <maven.compiler.source>21</maven.compiler.source>
    <maven.compiler.target>21</maven.compiler.target>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <skipTests>true</skipTests>

    <spring.boot.version>3.3.5</spring.boot.version>
    <spring-cloud.version>2023.0.1</spring-cloud.version>
    <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
    <spring.boot.test.version>3.3.5</spring.boot.test.version>
    <lombok.version>1.18.30</lombok.version>
    <flatten-maven-plugin.version>1.2.7</flatten-maven-plugin.version>

    <mybatis-plus.version>3.5.10.1</mybatis-plus.version>
  </properties>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.3.5</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>

  <dependencyManagement>

    <dependencies>
      <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-bom</artifactId>
        <version>${mybatis-plus.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- Spring Boot -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>${spring.boot.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- Spring Cloud -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- Spring Cloud Alibaba -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring-cloud-alibaba.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <version>${spring.boot.test.version}</version>
      </dependency>
      <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <optional>true</optional>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <!-- 阿里云的Maven镜像源 -->
  <repositories>
    <repository>
      <id>aliyunmaven</id>
      <name>aliyun</name>
      <url>https://maven.aliyun.com/repository/public</url>
    </repository>
    <repository>
      <id>central2</id>
      <name>central2</name>
      <url>https://repo1.maven.org/maven2/</url>
    </repository>
  </repositories>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>repackage</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

新建二级模块,命名为MyApplications,这里存放的是所有的微服务接口,比如说权限校验auth,会员模块member,文件模块file

  • 删除src目录,pom.xml默认
  • 在MyApplications模块下新建两个子模块,这里命名为myapp1、myapp2,注意打包设置repackage,与spring boot 单一项目是不同的。
    在这里插入图片描述代码如下,引入loadbalancer 、nacos、spring boot
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.que5</groupId>
        <artifactId>MyApplications</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <artifactId>myapp1</artifactId>
    <name>Archetype - myapp1</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-loadbalancer</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>


myapplication配置文件

  1. 新建application.yml
app:
  site:
    ip: nacos服务器ip
server:
  port: 7701
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
spring:
  application:
    name: myapp1
  cloud:
    nacos:
      discovery:
        group: QUE5
        server-addr: ${app.site.ip}:8848
      username: nacos
      password: 密码
    loadbalancer:
      nacos:
        enabled: true
  servlet:
    multipart:
      enabled: true
      file-size-threshold: 0
      max-file-size: 100MB
      max-request-size: 300MB
management:
  endpoints:
    web:
      exposure:
        include: "*"
  1. 新建启动类MyApp1Application.java,这里加上RestTemplate 是为了后面两个微服务myapp1跟myapp2通信
package com.que5;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.core.env.Environment;
import org.springframework.web.client.RestTemplate;

/**
 * @author zhouminghua
 * @version 1.0
 * @date 2025-2-15 09:28:57
 * @description 启动类
 * @site https://www.que5.com
 */
@SpringBootApplication
@EnableDiscoveryClient
public class MyApp1Application  {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(MyApp1Application.class);

        ConfigurableApplicationContext configurableApplicationContext = app.run(args);
        Environment env = configurableApplicationContext.getEnvironment();
        app.setBannerMode(Banner.Mode.CONSOLE);
    }
    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

  1. 新建MyApp1Controller .java,预留msg请求参数后续可以myapp2调用
package com.que5;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 * 用户列表 前端控制器
 * </p>
 *
 * @author evan
 * @since 2024-11-28
 */
@RestController
@RequestMapping("/cloud")
public class MyApp1Controller {

    @Value("${server.port}")
    private Integer port;
    @Value("${spring.application.name}")
    private String name;
    @GetMapping("/hello")
    public String hello(@RequestParam(name = "msg",required = false) String msg) {
        return "hello name:"+name+",port:"+port + " msg:" + msg;
    }
}

  1. myapp2同上

运行MyApp1Application.java MyApp2Application.java注意yml配置下的spring.application.name 与server.port要不同:

-打开nacos查看服务列表,成功,详情可以查看具体的端口信息等~
在这里插入图片描述
-打开浏览器,输入http://localhost:7701/cloud/hellohttp://localhost:7702/cloud/hello
在这里插入图片描述

结语: 注意对应版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值