文档章节

spring-cloud入门环境搭建

放手的风筝
 放手的风筝
发布于 2016/08/10 09:51
字数 1235
阅读 1412
收藏 10

spring-cloud入门环境搭建

1.什么是spring-cloud

spring-cloud是spring提供的微服务整合开发框架。Spring Cloud 为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性 Token、全局锁、决策竞选、分布式会话和集群状态)操作的开发工具。使用 Spring Cloud 开发者可以快速实现上述这些模式。

2.为什么使用spring-cloud

  1. 经历过netflix业务考验,国外大规模使用
  2. 入门门槛低,国内大批量使用spring
  3. 快速搭建

3.spring-cloud快熟搭建入门

1. eureka 服务注册组件

image 下载 https://github.com/mykite/eureka-server.git 编译后直接运行即可,或 mvn clean install 后直接运行jar包后访问 部署后: _20160809115004

2. configServer

对配置的集中管理,使用svn or git
https://github.com/mykite/configserver.git
编译后直接运行即可,或 mvn clean install 后直接运行jar包后访问
使用方式
在configserver中配置的
spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/mykite/config-repostory
提交到test分支文件hell-server.yml
文件内容:
test.name: kite
访问:http://localhost:8888/hello-server/profiles/test
会访问当前配置github上的test分支下的hello-server.yml(or properties文件)
对应应用中的配置
spring:
  cloud:
    config:
      uri: http://localhost:8888
      label: test

可以实现注入

3. ribbon

ribbon用以实现负载均衡;实现软负载均衡,核心有三点:

  1. 服务发现,发现依赖服务的列表
  2. 服务选择规则,在多个服务中如何选择一个有效服务
  3. 服务监听,检测失效的服务,高效剔除失效服务

服务选择规则,其中包括:

  • 简单轮询负载均衡
  • 加权响应时间负载均衡
  • 区域感知轮询负载均衡
  • 随机负载均衡 _20160810095858

4. hystrix

断路器

1495376295-5714a86048d32_articlex

5. zuul

类似nginx,提供反向代理的功能

2240067315-5714a89f0ce51_articlex

项目搭建

项目结构

image springcloud-server 提供的服务 springcloud-client 通过feginClient调用服务 springcloud-feginclient 通过feginClient调用server springcloud-parent maven父项目

parent

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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.3.5.RELEASE</version>
	</parent>
	<groupId>com.kite.test</groupId>
	<artifactId>springcloud-parent</artifactId>
	<version>1.0.0</version>
	<packaging>pom</packaging>

	<name>springcloud-parent</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<modules>
		<module>../springcloud-client</module>
		<module>../springcloud-server</module>
		<module>../springcloud-feginclient</module>
	</modules>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Brixton.SR4</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	<dependencies>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-config</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-eureka</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-ribbon</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zuul</artifactId>
		</dependency>
	</dependencies>
</project>

server

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>
	<packaging>jar</packaging>
	<name>springcloud-client</name>
	<artifactId>springcloud-server</artifactId>
	<url>http://maven.apache.org</url>

	<parent>
		<groupId>com.kite.test</groupId>
		<artifactId>springcloud-parent</artifactId>
		<version>1.0.0</version>
	</parent>

</project>

提供的服务

package com.kite.test.springcloud.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * 
 * 类HelloController.java的实现描述:暴露对外服务
 * @author pengliang 2016年8月8日 下午4:23:14
 */
@RestController
public class HelloController {
	
	/**
	 * rest 服务用来测试 
	 * --@requestParam url?xxx=name 
	 * --requestBody 认定为json传输解析  url?{xxx=name}
	 * @param name
	 * @return
	 */
	@RequestMapping(value = "/hello", method = RequestMethod.GET)
	public String hello(String name) {
		return "{hello: '" + name + "'}";
	}
	
}

启动类

package com.kite.test.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;


//springBoot  作为主启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker 
public class ServerApplication {
	
    public static void main(String[] args) {
    	SpringApplication.run(ServerApplication.class, args);
    }
}
feginClient

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>
	<packaging>jar</packaging>
	<name>springcloud-feginclient</name>
	<artifactId>springcloud-feginclient</artifactId>
	<url>http://maven.apache.org</url>
	
	<parent>
		<groupId>com.kite.test</groupId>
		<artifactId>springcloud-parent</artifactId>
		<version>1.0.0</version>
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

</project>

feginClient提供接口

package com.kite.test.springcloud.feginclient;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


/**
 * feginClient接口
 * 类HelloFeginClient.java的实现描述:通过feginClient自动调用
 * @author pengliang 2016年8月8日 下午4:25:36
 */
@FeignClient(value="HelloServer") //对应到的server端的spring.application.name
public interface HelloFeginClient {
	
@RequestMapping(value = "/hello", method=RequestMethod.POST)
	public String hello(@RequestParam(name="name") String name);

}

cliet

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>
	<packaging>jar</packaging>
	<name>springcloud-client</name>
	<artifactId>springcloud-client</artifactId>
	<url>http://maven.apache.org</url>
	
	<parent>
		<groupId>com.kite.test</groupId>
		<artifactId>springcloud-parent</artifactId>
		<version>1.0.0</version>
	</parent>
	
	<dependencies>
		<dependency>
			<groupId>com.kite.test</groupId>
			<artifactId>springcloud-feginclient</artifactId>
			<version>1.0.0</version>
		</dependency>
	</dependencies>
</project>

client 调用服务类

package com.kite.test.springcloud.client.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.kite.test.springcloud.feginclient.HelloFeginClient;

/**
 * 调用测试
 * 类CallHelloController.java的实现描述:调用feginClient测试
 * @author pengliang 2016年8月8日 下午4:42:14
 */
@RestController
public class CallHelloController {
	
	private Logger log = LoggerFactory.getLogger(CallHelloController.class);
	@Autowired
	private HelloFeginClient helloFeginClient;
	
	@RequestMapping(value="/hello", method = RequestMethod.GET)
	public String hello(String name) {
		log.info("call hello parameter:{}", name);
		return helloFeginClient.hello(name);  
	}
}

client 启动类

package com.kite.test.springcloud.client;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.kite.test")
@EnableCircuitBreaker
public class ClientApplication {
	public static void main(String[] args) {
		SpringApplication.run(ClientApplication.class, args);
	}
}

调用流程图

image

应用实例:

在具体的微服务用力中我们一般采用json来作为数据传输格式,通过feginClient来对服务调用来做一层封装hystrix在对feginClient调用时对依赖失败做隔离,ribbon做负载均衡(使用feginClient时已经默认集成ribbon)

项目源码 https://github.com/mykite/springcloud-test-compoments.git

© 著作权归作者所有

共有 人打赏支持
放手的风筝
粉丝 14
博文 60
码字总数 50362
作品 0
浦东
程序员
加载中

评论(5)

放手的风筝
放手的风筝

引用来自“xianhu”的评论

springcloud-parent/src/main/java/com/kite/test/springcloud_parent/App.java 乱码
无用文件已删除
x
xianhu
springcloud-parent/src/main/java/com/kite/test/springcloud_parent/App.java 乱码
放手的风筝
放手的风筝

引用来自“xunmonghun”的评论

那个git下载下来,其中test里面的那个java文件是乱码
我去看了下,没有发现乱码啊
xunmonghun
xunmonghun
那个git下载下来,其中test里面的那个java文件是乱码
xunmonghun
xunmonghun
那个git下载下来,其中test里面的那个java文件是乱码
spring cloud 入门系列:总结

从我第一次接触Spring Cloud到现在已经有3个多月了,当时是在博客园里面注册了账号,并且看到很多文章都在谈论微服务,因此我就去了解了下,最终决定开始学习Spring Cloud。我在一款阅读App...

JAVA开发老菜鸟
07/20
0
0
微服务架构实战学习(四):RPC 框架对比

下面是对市面上比较流行的 RPC 框架的对比 以上对比是我结合各框架的网上资料以及官方文档资源总结的,在实际的使用过程中。我们可以结合我们的业务场景来选择不同的框架。 虽然说没有最好的...

雨林_a1d6
06/11
0
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
09/18
0
0
2018年互联网架构主流微服务架构之潮流的主先锋Spring Boot 2.0

一、Spring Boot 介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定...

A尚学堂Len老师
08/21
0
0
Spring Boot基础教程 ( 二 ) :使用 Intellij 中的 Spring Initializr 来快速构建 Spring Boot/Cloud 工程

原文出处:didispace 在之前的所有Spring Boot和Spring Cloud相关博文中,都会涉及Spring Boot工程的创建。而创建的方式多种多样,我们可以通过Maven来手工构建或是通过脚手架等方式快速搭建...

didispace
09/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

sed命令扩展使用操作

打印某行到某行之间的内容 假若文件test.txt的内容是: ertfff**[abcfd]123324444[rty]**fgfgf 怎么能截取 [abcfd]123324444[rty] 这一部分出来呢? 操作命令: 知道开始行和结...

野雪球
10分钟前
0
0
JVM内存笔记

Hotspot JVM 中的 Java 线程与原生操作系统线程有直接的映射关系。当线程本地存储、缓 冲区分配、同步对象、栈、程序计数器等准备好以后,就会创建一个操作系统原生线程。 Java 线程结束,原...

凌渡
16分钟前
0
0
284. Peeking Iterator

Description Tag: Design Difficulties: Medium Given an Iterator class interface with methods: next() and hasNext(), design and implement a PeekingIterator that support the pee......

52iSilence7
18分钟前
0
0
防止快速重复点击的两种思维

防止重复执行的两种思维 场景 下单时,提交按钮,因为网络卡顿或者手快重复点击,导致重复提交订单; 微博,更新个人状态或发表评论时,快速多次点击[发送]按钮,导致相同的信息发送多次. 解决思路 ...

黄威
44分钟前
0
0
在windows环境下使用Virtualbox虚拟Debian系统来运行Docker

标题绕口。 我之前一直使用 Virtualbox 和 homestead 来运行我的 PHP 开发环境。最近决心开始尝试 DevOps,使得开发、部署容器化,来化解人为操作失误和环境不兼容等问题造成的各种损失。就打...

zgldh
46分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部