zoukankan      html  css  js  c++  java
  • Ribbon 负载均衡搭建

    本机IP为  192.168.1.102

    1.   新建Maven  项目    ribbon

    2.   pom.xml

    复制代码
    <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>
        <groupId>com.java</groupId>
        <artifactId>ribbon</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <name>${project.artifactId}</name>
    
        <!-- 配置版本常量 -->
        <properties>
            <jdk.version>1.8</jdk.version>
            <spring.cloud.version>2.0.0.RELEASE</spring.cloud.version>
        </properties>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.5.RELEASE</version>
        </parent>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
                <version>${spring.cloud.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
                <version>${spring.cloud.version}</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.49</version>
            </dependency>
    
    
            <!-- 热部署 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>springloaded</artifactId>
                <version>1.2.8.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
    
        </dependencies>
    
        <build>
            <finalName>${project.artifactId}</finalName>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>${jdk.version}</source>
                        <target>${jdk.version}</target>
                        <encoding>UTF-8</encoding>
                    </configuration>
                </plugin>
    
                <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>
    复制代码

    3.   application.yml

    复制代码
    server:
      port: 80
    
    eureka:
      client:
        register-with-eureka: false
        service-url: 
          defaultZone: http://192.168.1.102:8080/eureka/  
          #defaultZone: http://s0.com:8080/eureka/,http://s1.com:8080/eureka/,http://s2.com:8080/eureka/  
    复制代码

    4.   RibbonStarter.java

    复制代码
    package com.java.ribbon;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.builder.SpringApplicationBuilder;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class RibbonStarter extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(RibbonStarter.class, args);
        }
    
        @Override
        protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
            return builder.sources(RibbonStarter.class);
        }
    
    }
    复制代码

    5.   ConfigBean.java

    复制代码
    package com.java.ribbon.config;
    
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.client.RestTemplate;
    
    import com.netflix.loadbalancer.IRule;
    import com.netflix.loadbalancer.RetryRule;
    
    @Configuration
    public class ConfigBean {
    
        @Bean
        @LoadBalanced
        public RestTemplate getRestTemplate() {
            return new RestTemplate();
        }
    
        @Bean
        public IRule myRule() {
            // return new RoundRobinRule();
            // return new RandomRule();
            return new RetryRule();
        }
    
    }
    复制代码

    6.   HostService.java

    复制代码
    package com.java.ribbon.service;
    
    import com.alibaba.fastjson.JSONObject;
    
    public interface HostService {
    
        JSONObject getHostMessage(String id);
    
    }
    复制代码

    7.   HostServiceImpl.java

    复制代码
    package com.java.ribbon.service.impl;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.netflix.ribbon.RibbonClient;
    import org.springframework.stereotype.Service;
    import org.springframework.web.client.RestTemplate;
    
    import com.alibaba.fastjson.JSONObject;
    import com.java.ribbon.service.HostService;
    
    @Service
    @RibbonClient(name = "MICROSERVICE")
    public class HostServiceImpl implements HostService {
    
        /**
         * Eureka中注册的微服务地址
         */
        private static final String REST_URL_PREFIX = "http://MICROSERVICE";
    
        @Autowired
        private RestTemplate restTemplate;
    
        @Override
        public JSONObject getHostMessage(String id) {
            return restTemplate.getForObject(REST_URL_PREFIX + "/getHostMessage/" + id, JSONObject.class);
        }
    
    }
    复制代码

    8.   HostController.java

    复制代码
    package com.java.ribbon.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.alibaba.fastjson.JSONObject;
    import com.java.ribbon.service.HostService;
    
    @RestController
    public class HostController {
    
        @Autowired
        private HostService hostService;
    
        @GetMapping("/getHostMessage/{id}")
        public JSONObject getHostMessage(@PathVariable String id) {
            return hostService.getHostMessage(id);
        }
    
    }
    复制代码

    9.  运行测试

    启动  Eureka   服务注册中心,参考  https://www.cnblogs.com/jonban/p/eureka.html

    启动  MicroService  微服务, 参考   https://www.cnblogs.com/jonban/p/microservice.html

    启动  Ribbon服务,运行 RibbonStarter.java

    浏览器输入URL

    http://192.168.1.102/getHostMessage/hello

    返回数据如下:

    {"hostname":"F6RK2EXYAFARPPS","hostAddress":"192.168.1.102","id":"hello"}

    截图如下:

    调用微服务返回数据成功

  • 相关阅读:
    Android 查看APK文件的签名算法
    Android 查看App冷启动时间/热启动时间/页面打开时间
    Android 查看Apk签名方式V1和V2
    Android App启动速度优化
    Android SharedPreferences中apply和commit的效率差距
    Gralde 网络代理
    Git 将子文件夹分离为一个新的库
    Fabric-Crashlytics-Android 注意点
    Gradle编译失败 generating the main dex list
    Gralde 同步失败
  • 原文地址:https://www.cnblogs.com/telwanggs/p/12620641.html
Copyright © 2011-2022 走看看