当前位置: 首页 > article >正文

简单实践 java spring cloud 负载均衡

1 概要

1.1 实现一个最简单的微服务。远程调用+负载均衡,基本上完成了最核心的微服务框架。

远程调用:RestTemplate

注册中心:eureka

负载均衡:Ribbon

1.2 要点

1.2.1 依赖

1.2.1.1 主框架依赖
  • spring boot 依赖
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter</artifactId>
        </dependency>
  •  spring cloud 依赖
<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 1.2.1.2  eureka依赖
  • 服务端依赖
<groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  • 客户端依赖 
<groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

 1.2.2 配置文件

  • 服务设置
server:
  port: 10086
spring:
  application:
    name: eureka server
  •  服务注册
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

1.2 技术关键词

  • spring-cloud-starter
    
  • spring-cloud-dependencies
  • spring-cloud-starter-netflix-eureka-server
  • spring-cloud-starter-netflix-eureka-client
  • spring-boot-starter-web
  • spring:
      application:
        name: eureka server
  • eureka:
      client:
        service-url:
          defaultZone: http://127.0.0.1:10086/eureka/
  • @SpringBootApplication
    @EnableEurekaServer
  • @Bean
    @LoadBalanced
    public RestTemplate
  • @Autowired
    RestTemplate restTemplate;
  • @RestController
  • return "函数2"+restTemplate.getForObject(url,String.class);
  • SpringApplication.run(Main.class);

 

2 代码

2.1 父工程

 <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xjc.springcloundtest</groupId>
        <artifactId>demo8</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>untitled</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

2.2 注册中 eureka

2.2.1 工程文件

 <?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xjc.springcloundtest</groupId>
        <artifactId>demo8</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>untitled</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
</project>

2.2.2 配置文件

server:
  port: 10086
spring:
  application:
    name: eureka server
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

2.2.3 主函数

package com.xjc.springcloundtest;

import com.netflix.discovery.shared.Application;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class);
        System.out.println("Hello world!");
    }
}

2.2.4 运行效果

2.3 服务工程

2.2.1 工程文件

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xjc.springcloundtest</groupId>
        <artifactId>demo8</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>untitled1</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

2.3.2 配置文件

spring:
  application:
    name: server1
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

2.3.3 主函数

package com.xjc.springcloundtest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class);
        System.out.println("Hello world!");
    }
}

2.3.4 控制器

package com.xjc.springcloundtest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    @RequestMapping("/fun")
    public String fun(){
        return "函数1";
    }
}

2.3.5 运行效果

 

2.4 消费者

2.4.1 工程文件

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.xjc.springcloundtest</groupId>
        <artifactId>demo8</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <artifactId>untitled2</artifactId>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

</project>

2.4.2 配置文件

server:
  port: 8081
spring:
  application:
    name: server2
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka/

2.4.3 主函数

package com.xjc.springcloundtest;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class);
        System.out.println("Hello world!");
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(RestTemplateBuilder builder ){
        return builder.build();
    }
}

2.4.4 消费者

package com.xjc.springcloundtest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class TestController {

    @Autowired
    RestTemplate restTemplate;

    @RequestMapping("/fun")
    public String fun(){
        //String url = "http://localhost:8080/fun";
        String url = "http://server1/fun";
        return "函数2"+restTemplate.getForObject(url,String.class);
    }
}

2.4.5 运行效果


http://www.kler.cn/a/227812.html

相关文章:

  • 商品列表及商品详情展示
  • 内外网文件摆渡企业常见应用场景和对应方案
  • 【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?
  • 12.udp
  • 青少年编程与数学 02-008 Pyhon语言编程基础 07课题、数字
  • Java创建项目准备工作
  • 前后端数据校验
  • LFU缓存(Leetcode460)
  • GLIP:零样本学习 + 目标检测 + 视觉语言大模型
  • Skywalking trace UI页面中字段信息详解,包括端点、跨度类型和Peer
  • React16源码: React中详解在渲染阶段Suspend的源码实现
  • 大数据量处理以及结果导出技术方案
  • 【数据结构】分治策略
  • vue2学习笔记(2/2)
  • 使用 axios 请求库,设置请求拦截
  • 命令注入漏洞原理以及修复方法
  • 解释 Python 中的描述符(Descriptor)是什么?如何在 Python 中实现一个简单的 ORM(对象关系映射)?
  • Golang中的HTTP请求凝聚器
  • C语言标准库所有字符串操作库函数汇总
  • ruoyi(若依)(el-menu也可参考)菜单栏过长显示省略号才显示气泡
  • SVDiff: Compact Parameter Space for Diffusion Fine-Tuning——【论文笔记】
  • 聊聊PowerJob的ContainerController
  • Vue中跨域问题的解决
  • 红队渗透靶机:LORD OF THE ROOT: 1.0.1
  • 聊聊并发编程,另送5本Golang并发编程新书
  • LeetCode--代码详解 1.两数之和