springcloud-Eureka集群和Ribbon配置本地部署

设计思路

通过简单的本地设置配置出eureka集群,设置出多个服务提供者(这里也就相当于多个服务器相同项目部署)注册到eureka集群去,然后配置一个Ribbon消费(也就是配置出一个请求)同样注册到eureka集群中去,通过查看结果可以看出Ribbon负载均衡的作用以及查看eureka集群的作用。
springcloud-Eureka集群和Ribbon配置本地部署_第1张图片
简单的maven创建出cloud项目,三个eureka项目,三个服务提供者项目。一个api项目(该项目是为了提供一些api接口或者是说实体类,这里我是写了一个实体类(做简单的查询),一个消费者项目进行远程访问服务。
依赖导入

 <dependencyManagement>
        <dependencies>
<!--            spring-cloud依赖-->
            <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Greenwich.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            spring-boot依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.1.4.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
<!--            链接数据库-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.49</version>
            </dependency>
<!--            数据源-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
<!--            springboot 启动器-->
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>1.3.2</version>
            </dependency>
<!--            junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
            </dependency>
            <!--lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>${lombok.version}</version>
            </dependency>
<!--            log4j-->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>

            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <version>${logback-core.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

因为eureka注册中心目前已经停更了,所以版本的使用一定要注意使用,我这里使用的是版本为
springcloud:Greenwich.SR1 srpingboot:2.1.4.RELEASE
启动类记住要使用1.x.x版本,不然之后的哦欸只会有很多容错。
以及一些其他依赖,其中可引入热部署工具,具体作用可以去百度。
实体类
springcloud-Eureka集群和Ribbon配置本地部署_第2张图片
eureka的配置文件
springcloud-Eureka集群和Ribbon配置本地部署_第3张图片
springcloud-Eureka集群和Ribbon配置本地部署_第4张图片

其中端口可随自己配置,然后hostname是自己的域名或者说是别名,可通过这个访问到自己的服务器ip,我这里是访问本地ip,使用不同的别名。
eureka的依赖

<dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

    </dependencies>

服务项目
配置
springcloud-Eureka集群和Ribbon配置本地部署_第5张图片
依赖

 <dependencies>
<!--        服务提供者-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
<!--       完善监控信息 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--        //配置实体类-->
        <dependency>
            <groupId>com.yin</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.5.0</version>
        </dependency>
        <!--        jetty-->


        <!--        热部署工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
    </dependencies>

在服务里面我写了一个监控信息的依赖,这里不导入也行。
启动类
springcloud-Eureka集群和Ribbon配置本地部署_第6张图片
一个消费服务
其实顾名思义,就是去注册中心找到相应需要的服务,然后由注册中心和负载均衡,这里是eureka和ribbon进行协调,返回最好的服务去给你访问。
配置
springcloud-Eureka集群和Ribbon配置本地部署_第7张图片
配置类

@Configuration
public class ConfigBean {
    @Bean
    @LoadBalanced //ribbon
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

因为ribbon是通过http下的rest进行通信服务,其内部原理下次更新。

访问服务配置


@RestController
public class DeptConsumerController {
    //理解消费者
    @Autowired
    private RestTemplate restTemplate;//便捷服务访问远程http服务的方法,简单的restful服务

    private static final String REST_URL_PREFIX ="http://SPRINGCLOUD-PROVIDER-DEPT";
    @RequestMapping("/consumer/dept/add")
    public boolean add(Dept dept){
        return restTemplate.postForObject(REST_URL_PREFIX+"/dept/add",dept,Boolean.class);
    }


    @RequestMapping("/consumer/dept/get/{id}")
    public Dept get(@PathVariable("id")Long id){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/get"+id,Dept.class);

    }
    @RequestMapping("/consumer/dept/list")
    public List get(){
        return restTemplate.getForObject(REST_URL_PREFIX+"/dept/list",List.class);

    }

执行结果:
springcloud-Eureka集群和Ribbon配置本地部署_第8张图片
得到结果可以去观察地址栏的变化。

你可能感兴趣的:(java,spring)