zoukankan      html  css  js  c++  java
  • SpringBoot分布式

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    一:介绍

    • Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。
    • 微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
    • Spring Cloud 中文文档 https://springcloud.cc/spring-cloud-dalston.html
    • Spring Cloud 官方文档 http://projects.spring.io/spring-cloud/#quick-start

    二:入门

    • 在IDEA新建空白工程

    1. 注册中心

    • 在工程下新建模块eureka-server

    1)导包

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

    2 )application.yml配置Eureka信息

    server:
      port: 8761
    eureka:
      instance:
        hostname: eureka-server #eureka实例的主机名
      client:
        register-with-eureka: false #不把自己注册到eureka
        fetch-registry: false #不从eureka上获取服务的注册信息
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

    3)开启@EnableEurekaServer注解

    package cn.zyzpp.eurekaserver;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
    
    /**
     * 开启@EnableEurekaServer注解
     */
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }
    

    4)开启注册中心

    2.服务提供者

    • 新建模块:provider-ticket

    1)导入依赖

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

    2)application.yml配置Eureka信息

    server:
      port: 8001 #8002
    spring:
      application:
        name: provider-ticket
    eureka:
      instance:
        prefer-ip-address: true #注册服务的时候使用服务的Ip地址
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

    3)Service层方法

    package cn.zyzpp.providerticket.service;
    
    import org.springframework.stereotype.Service;
    
    /**
     * Create by yster@foxmail.com 2018/6/4/004 18:37
     */
    @Service
    public class TicketService {
    
        public String getTicket(){
            return "《厉害了,我的国》";
        }
    }
    

    4)暴露HTTP接口

    /**
     * Create by yster@foxmail.com 2018/6/4/004 18:39
     */
    @RestController
    public class TicketControllert {
        //轻量级HTTP
    
        @Autowired
        private TicketService ticketService;
    
        @GetMapping("/ticket")
        public String getTicket(){
            System.out.println("8001"); //8002
            return ticketService.getTicket();
        }
    
    }
    

    5)然后更改端口,分别打包该模块为jar包。运行。

    3.服务消费者

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

    • 新建模块consumer-user

    1)application.yml配置Eureka信息

    server:
      port: 8200
    spring:
      application:
        name: consumer-user
    eureka:
      instance:
        prefer-ip-address: true #注册服务的时候使用服务的Ip地址
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/
    

    2)开启发现服务的功能,使用负载均衡机制(默认轮询)

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @EnableDiscoveryClient /*开启发现服务功能*/
    @SpringBootApplication
    public class ConsumerUserApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConsumerUserApplication.class, args);
        }
    
        @LoadBalanced /*开启负载均衡机制*/
        @Bean
        public RestTemplate getRestTemplate(){
            return new RestTemplate();
        }
    
    }
    

    3)获取服务

    /**
     * Create by yster@foxmail.com 2018/6/4/004 19:13
     */
    @RestController
    public class UserController {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("/buy")
        public String getTicket(){
            String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class);
            return "购买了 "+s;
        }
    }
    
    • 启动服务消费者模块。查看服务提供者的控制台打印。
    • 会发现第一次请求8001,第二次8002,8001,8002,,这是因为使用了负载均衡。

    版权声明

    【本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究。若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!】

  • 相关阅读:
    Oracle SQL语句大全—查看表空间
    Class to disable copy and assign constructor
    在moss上自己总结了点小经验。。高手可以飘过 转贴
    在MOSS中直接嵌入ASP.NET Page zt
    Project Web Access 2007自定义FORM验证登录实现 zt
    SharePoint Portal Server 2003 中的单一登录 zt
    vs2008 开发 MOSS 顺序工作流
    VS2008开发MOSS工作流几个需要注意的地方
    向MOSS页面中添加服务器端代码的另外一种方式 zt
    状态机工作流的 SpecialPermissions
  • 原文地址:https://www.cnblogs.com/onblog/p/13044264.html
Copyright © 2011-2022 走看看