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"}

    截图如下:

    调用微服务返回数据成功

    .

  • 相关阅读:
    修改表的定义
    DataFrame.groupby()函数
    有限差分法
    Python之pandas库
    类:实验2家中的电视
    函数:使用函数指针操作函数
    函数:函数操作结构体通过按值传递以及按址传递,使用动态内存
    函数:使用数组名作为函数参数进行操作
    函数:使用递归实现阶乘
    函数:通过按值传递及传递结构地址操作结构
  • 原文地址:https://www.cnblogs.com/jonban/p/ribbon.html
Copyright © 2011-2022 走看看