文档章节

spring-cloud入门环境搭建

放手的风筝
 放手的风筝
发布于 2016/08/10 09:51
字数 1235
阅读 1508
收藏 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

© 著作权归作者所有

共有 人打赏支持
上一篇: eureka
放手的风筝
粉丝 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
2018年互联网架构主流微服务架构之潮流的主先锋Spring Boot 2.0

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

A尚学堂Len老师
08/21
0
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

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

Java小铺
09/18
0
0
企业级开发基础框架 SLife 1.0 加入 Spring Boot Admin 监控

企业级开发基础框架 SLife 1.0 已发布。SLife 是使用 Spring Boot 搭建的一个企业级快速开发脚手架。SLife 的目的是帮助初学者入门Spring boot 并能快速了解 一个web框架的快速搭建。同时帮助...

jamen
2017/12/19
2.9K
3

没有更多内容

加载失败,请刷新页面

加载更多

搭建git服务器————gitlab

github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器 找一台服务器,首先要...

chencheng-linux
15分钟前
2
0
用Redis实现“秒杀”系统

导论 曾经被问过好多次怎样实现秒杀系统的问题。昨天又在CSDN架构师微信群被问到了。因此这里把我设想的实现秒杀系统的价格设计分享出来。供大家参考。 秒杀系统的架构设计 秒杀系统,是典型...

小刀爱编程
29分钟前
7
0
GO redis 相关操作

在gopath 目录下安装 go get github.com/garyburd/redigo/redis package mainimport ("fmt""github.com/garyburd/redigo/redis")//定义一个全局链接池变量var pool *redis.Pool//......

汤汤圆圆
今天
20
0
java8性特性,常用的lambda表达式

1、抽取多个对象中的某个属性,用数组接收 List<Student> students = new ArrayList<>(); List<String> names =students.stream().map(Student::getName).collect(Collectors.toList()); 2、......

Boss-x
今天
19
0
flutter 子组件与父组件

无论是子组件还是父组件,任何时候initState()只执行一次,如果需要判断 就在build里面进行,不然无效的。

大灰狼wow
今天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部