zoukankan      html  css  js  c++  java
  • SpringCloud入门(一)

    什么是SpringCloud

    Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。。(特意说明一下,Spirngboot不是微服务框架)

    服务提供者与消费关系

    服务提供者:提供服务被人调用
    消费者:调用被人服务

    服务的注册与发现(Eureka )

    在这里,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。

    什么是Eureka

    官方的介绍在这里Eureka wiki。Eureka是Netflix开源的一个RESTful服务,主要用于服务的注册发现。Eureka由两个组件组成:Eureka服务器和Eureka客户端。Eureka服务器用作服务注册服务器。Eureka客户端是一个java客户端,用来简化与服务器的交互、作为轮询负载均衡器,并提供服务的故障切换支持。Netflix在其生产环境中使用的是另外的客户端,它提供基于流量、资源利用率以及出错状态的加权负载均衡。

    • 在我看来,Eureka的吸引力来源于以下几点:
      开源:大家可以对实现一探究竟,甚至修改源码。
      可靠:经过Netflix多年的生产环境考验,使用应该比较靠谱省心
      功能齐全:不但提供了完整的注册发现服务,还有Ribbon等可以配合使用的服务。
      基于Java:对于Java程序员来说,使用起来,心里比较有底。
      spring cloud可以使用Spring Cloud, 与Eureka进行了很好的集成,使用起来非常方便。

    好了不说了,直接上码,直观明了~~~

    • 我的目录结构

    • Maven依赖

    <parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.2.RELEASE</version>
    		<relativePath /> <!-- lookup parent from repository -->
    	</parent>
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<!--eureka server -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka-server</artifactId>
    		</dependency>
    		<!-- spring boot test -->
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Dalston.RC1</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    
    

    这里的依赖需要加入Springboot的依赖包,因为SpringCloud需要Springboot来展示web层,同时Springboot也整合了SpringMVC,所以这里需要Springboot的依赖包

    • 配置application.yml
    server:
      port: 8888
    eureka:
      instance:
        hostname: localhost
      client:
        registerWithEureka: false
        fetchRegistry: false
        serviceUrl:
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
    
    
    • 启动EurekaServer
    @SpringBootApplication
    @EnableEurekaServer
    public class App {
    	public static void main(String[] args) {
    		SpringApplication.run(App.class, args);
    	}
    }
    
    

    效果展示:

    服务提供者

    • 创建项目service-number
      maven依赖:
    <parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>1.5.2.RELEASE</version>
    		<relativePath /> <!-- lookup parent from repository -->
    	</parent>
    	<properties>
    		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    		<java.version>1.8</java.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    	<dependencyManagement>
    		<dependencies>
    			<dependency>
    				<groupId>org.springframework.cloud</groupId>
    				<artifactId>spring-cloud-dependencies</artifactId>
    				<version>Dalston.RC1</version>
    				<type>pom</type>
    				<scope>import</scope>
    			</dependency>
    		</dependencies>
    	</dependencyManagement>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    	<repositories>
    		<repository>
    			<id>spring-milestones</id>
    			<name>Spring Milestones</name>
    			<url>https://repo.spring.io/milestone</url>
    			<snapshots>
    				<enabled>false</enabled>
    			</snapshots>
    		</repository>
    	</repositories>
    

    创建appiication.yml文件

    eureka:
      client:nu
        serviceUrl:
          defaultZone: http://localhost:8888/eureka/
    server:
      port: 8762
    spring:
      application:
        name: service-number
    
    • 服务接口
    @RestController
    public class MemberController {
    
    	@RequestMapping("/getUserList")
    	public List<String> getUserList() {
    		List<String> listUser = new ArrayList<String>();
    		listUser.add("zhangsan");
    		listUser.add("lisi");
    		listUser.add("yushengjun");
    		listUser.add("serverPort:"+serverPort);
    		listUser.add(""+count);
    		return listUser;
    	}
    }
    
    • 发布服务
      通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
    @SpringBootApplication
    @EnableEurekaClient
    public class AppMember {
    
    	public static void main(String[] args) {
    		SpringApplication.run(AppMember.class, args);
    	}
    }
    
    

    效果展示:记住要先启动注册中心,不然启动提供者服务会报错

    在eureka注册中心里面能看到这个注册服务的名字

    服务消费者

    • Maven依赖 :同上
    • application.yml配置:
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8888/eureka/
    server:
      port: 8764
    spring:
      application:
        name: service-order
    
    • 编写service,调用service-number
    @SuppressWarnings("unchecked")
    @Service
    public class NumberService {
    	@Autowired
    	RestTemplate restTemplate;
    
    	public List<String> getOrderByUserList() {
    		return restTemplate.getForObject("http://service-number/getUserList", List.class);
    	}	
    }
    

    控制层controller:

    @RestController
    public class OrderController {
    	@Autowired
    	private NumberService numberService;
    	
    	
    	@RequestMapping("/getOrderUserAll")
    	public List<String> getOrderUserAll(){
    		System.out.println("订单服务开始调用会员服务");
    		return numberService.getOrderByUserList();
    	}
    }
    

    启动APP:

    @SpringBootApplication
    @EnableEurekaClient
    public class OrderApp {
    	public static void main(String[] args) {
    		SpringApplication.run(OrderApp.class, args);
    	}
    
    • 演示效果


      到这里,基本上实现了消费者,提供者,注册中心的关系~~~
  • 相关阅读:
    新年来了,却似乎没有新年的迹象和心情
    XHTC最新进展
    有件事很是头疼
    完善中的HTML版ProcessBuilder
    20041114 Bindows
    想不到这么快就申请成功了,多年未曾体会的激动仿佛又重返我身了
    有人需要这样的HTML Menu组件吗?
    告知所有需要XHTC和ProcessBuilder的朋友
    醉里插花花莫笑,可怜人似春将老
    Flex创建一个UI component的全过程
  • 原文地址:https://www.cnblogs.com/Libbo/p/11581340.html
Copyright © 2011-2022 走看看