文档章节

spring-cloud入门环境搭建

放手的风筝
 放手的风筝
发布于 2016/08/10 09:51
字数 1235
阅读 1324
收藏 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
码字总数 50340
作品 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
Spring Initializr 构建Spring Boot/Cloud工程

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

明理萝
06/20
0
0
Spring Cloud配置中心

Spring Cloud配置中心(Config) Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、 消息总线、熔断机制等。 配置中心在Spring Cloud的众...

Java同学会
06/21
0
0
Spring Cloud 入门教程 - Eureka服务注册与发现

简介 在微服务中,服务注册与发现对管理各个微服务子系统起着关键作用。随着系统水平扩展的越来越多,系统拆分为微服务的数量也会相应增加,那么管理和获取这些微服务的URL就会变得十分棘手,...

乾儿
05/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

nginx访问日志-日志切割-静态文件不记录日志和过期时间

nginx访问日志: vim /usr/local/nginx/conf/nginx.conf #搜索log_format 该字段定义日志格式,默认如下: #combined_realip日志格式的名字,可随意定义; 定义访问日志: 需在虚拟主机配置文...

ZHENG-JY
7分钟前
0
0
180.mariadb 主从复制

参考:https://blog.csdn.net/chengxuzaza/article/details/62042920 睡觉睡觉,明天写 1.效果 当主库中数据有变化的时候,从库就自动同步 2. 环境要求 至少两台 linux服务器 (教程:https...

Lucky_Me
17分钟前
0
0
erlng file id3v1 id3v1.1

%% ---%% Excerpted from "Programming Erlang",%% published by The Pragmatic Bookshelf.%% Copyrights apply to this code. It may not be used to create training material, %% ......

xueyuse0012
18分钟前
1
0
RabbitMq的安装

环境Centos6.5 32位 JDK 1.7.8 Jdk的卸载 rpm -qa|grep jdk yum –y remove 上边的安装包 JDK的安装 Rpm –ivh jdk安装包 配置环境变量 export JAVA_BIN=/usr/java/jdk1.7.0_80/bin export J......

DemonsI
22分钟前
0
0
http和https协议

HTTPS全称为Hypertext Transfer Protocol over Secure Socket Layer,中文含义为“超文本传输协议在安全加密字层”,简单来说就是加密数据传输,通俗的说就是安全连接。 HTTPS安全超文本传输...

寰宇01
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部