SpringBoot与SpringCloud集成 :

简介

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

关于微服务相关文档可以点击此处查看。

常用组件

  • 服务发现——Netflix Eureka
  • 客服端负载均衡——Netflix Ribbon
  • 断路器——Netflix Hystrix
  • 服务网关——Netflix Zuul
  • 分布式配置——Spring Cloud Config

在后续的学习中,会给大家继续介绍。

步骤

创建项目

项目结构如下,eureka-server外,在创建项目时选中Eureka Server 其余都应该为Eureka Discovery

pom文件配置

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
<?xml version="1.0" encoding="UTF-8"?><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.5.20.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.hph</groupId>    <artifactId>eureka-server</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>eureka-server</name>    <description>Demo project for Spring Boot</description>

    <properties>        <java.version>1.8</java.version>        <spring-cloud.version>Edgware.SR5</spring-cloud.version>    </properties>

    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-eureka-server</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>${spring-cloud.version}</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>

</project>

在eureka-server中我们添加application.yml配置文件。

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

在EurekaServerApplication中我们添加@EnableEurekaServer 注解

123456789101112131415
package com.hph.eurek;

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer  //添加@SpringBootApplicationpublic class EurekaServerApplication {

    public static void main(String[] args) {        SpringApplication.run(EurekaServerApplication.class, args);    }

}

启动项目

provider

下面我们来编写provider项目代码

pom文件配置如下

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
<?xml version="1.0" encoding="UTF-8"?><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.5.20.RELEASE</version>        <relativePath/> <!-- lookup parent from repository -->    </parent>    <groupId>com.hph</groupId>    <artifactId>provider-ticket</artifactId>    <version>0.0.1-SNAPSHOT</version>    <name>provider-ticket</name>    <description>Demo project for Spring Boot</description>

    <properties>        <java.version>1.8</java.version>        <spring-cloud.version>Edgware.SR5</spring-cloud.version>    </properties>

    <dependencies>        <dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-netflix-eureka-client</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>${spring-cloud.version}</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>

</project>

创建服务

项目结构如图所使

123456789
package com.hph.provider.service;

import org.springframework.stereotype.Service;

@Servicepublic class TicketService {    public String getTicket(){        return "《复仇者联盟4:终局之战》";    }

配置视图控制器

12345678910111213141516171819
package com.hph.provider.controller;

import com.hph.provider.service.TicketService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;

@RestControllerpublic class TicketController {

    @Autowired    TicketService ticketService;

    @GetMapping("/ticket")    public String getTicket() {        return ticketService.getTicket();    }}

编写配置文件

12345678910111213
server:  port: 8001spring:  application:    name: provider-ticket

eureka:  instance:    prefer-ip-address: true # 注册服务的时候使用服务的ip地址  client:    service-url:      defaultZone: http://localhost:8761/eureka/

启动服务

再去查看一下服务端

服务成功注册。

我们可以更换服务端口把它打成jar包实现多服务的注册测试。

consumer

consumer端项目结构如下

1234567891011121314151617181920212223
package com.hph.consumer;

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 //开启发现服务功能@SpringBootApplicationpublic class ConsumerUserApplication {

    public static void main(String[] args) {        SpringApplication.run(ConsumerUserApplication.class, args);    }

    @LoadBalanced  //使用负载均衡机制    @Bean    public RestTemplate restTemplate() {        return new RestTemplate();    }}
123456789101112131415161718192021
package com.hph.consumer.controller;

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;

@RestControllerpublic class UserController {

    @Autowired    RestTemplate restTemplate;

    @GetMapping("/buy")    public String buyTicket(String name) {        //此参数为注册在Eureka中的服务        String ticketName = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class);        return name + "购买了" + ticketName;

    }}

启动后我们发现在Eureka上注册了另外一个服务

测试

我们访问consumer8200端口的buy方法。我们可以说这个服务时负载均衡的。它使用了轮询的方式。

后续会继续学习关于SpringClould的相关知识。

SpringBoot与SpringCloud集成相关推荐

  1. Spring、SpringMVC、SpringBoot、SpringCloud的联系和区别

    一. 上一篇文章刚刚简单介绍了spring框架,下面我将介绍一下Spring,SpringMVC,SpringBoot,SpringCloud的联系和区别. 首先先简单介绍一下各个框架. Spring ...

  2. 【面试题】Spring,SpringMVC,SpringBoot,SpringCloud有什么区别和联系?

    介绍 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.基础版本只有 2 MB 左右的大小,Spring使你能够编写更干净.更可管理.并且更易于测试的代码. SpringMV ...

  3. spring、springMvc、springBoot和springCloud的联系与区别

    作者:尘光掠影  来源:CSDN  原文:https://blog.csdn.net/alan_liuyue/article/details/80656687  spring和springMvc: 1 ...

  4. SpringBoot与SpringCloud的关系与区别

    一.SpringBoot和SpringCloud简介 1.SpringBoot:是一个快速开发框架,通过用MAVEN依赖的继承方式,帮助我们快速整合第三方常用框架,完全采用注解化(使用注解方式启动Sp ...

  5. Spring、SpringMVC、SpringBoot、SpringCloud的关系分享

    最近在做一些技术架构原型,发现Spring已经跟三四年前发生了很多的区别,技术的迭代日新月异,再不学习就赶不上时代的脚步 ,以下是最近关于Spring.SpringMVC.SpringBoot.Spr ...

  6. SpringCloud集成Security安全(Config配置中心)

    1.说明 为了保护配置中心的敏感数据, 需要对Config Server进行安全保护, 本文基于Spring Security方案, 为Config Server增加最简单的Basic安全认证. 2. ...

  7. 史上最简单:SpringCloud 集成 mybatis-plus(以若依微服务版本为例)

    编者按:若依微服务版是基于Spring Boot.Spring Cloud & Alibaba的微服务的权限管理系统,也是笔者比较推荐的个人学习和企业实践都比较优秀的开源项目. 笔者也以此项目 ...

  8. SpringBoot和SpringCloud配置

    SpringBoot和SpringCloud配置 一.springBoot配置 1.1.yml 1.2.pom 1.3.RestTemplate 二.注册中心 Spring Cloud Eureka ...

  9. 不服不行啊,华为P8确实把SpringCloud集成Dubbo给一次性讲透了

    Spring Cloud集成Dubbo 目前Dubbo在国内还是有较多公司在使用的,一方面是因为Dubbo作为阿里巴巴开源的一个SOA服务治理解决方案,在国内发展较早,有比较好的先发优势:另一方面是因 ...

最新文章

  1. linux拷贝文件夹怎么删除,linux文件及文件夹拷贝移动删除
  2. 【Go API 开发实战 1】该教程所实现的 API 功能
  3. IdentityServer4系列 | 简化模式
  4. 安卓拍照上传php服务器,Android拍照上传至PHP服务器并写入MySql数据库(下)
  5. 将列表打印为表格数据
  6. 使用git bash提交代码到github托管
  7. 怎么改掉科学计数法_宝宝口唇干裂怎么回事?该怎么办?
  8. Vue —— 移动端添加 fastclick
  9. Linux-设备驱动概述
  10. p1 p 0xf在c语言中啥意思,单片机中的P1=0xfe什么意思
  11. MQTT 基础--MQTT 协议简介 :第 1 部分
  12. Prettier formatter for vscode 配置单引号问题
  13. 一些实用的电脑小技巧(1)
  14. 『每日AI』马化腾丨中国互联网已从C2C进化为KFC!
  15. python爬取豆瓣电视剧页面
  16. CanOpen通信协议python实现
  17. 尚学堂j2ee视频教程
  18. Matlab求时变微分方程组解,Matlab求常微分方程组的解析解
  19. 手机号注册过,被遗忘的网站有哪些?
  20. 1.2 随机事件及其概率

热门文章

  1. [CF741D] Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
  2. 【Linux】awk指令
  3. ASP.NET MVC 4 内容映射
  4. 【C/S】FIPS安全验证问题
  5. window.open被浏览器拦截的解决方案
  6. 去除utf8文件的bom标记
  7. hdu 2586 How far away? (LCA模板)
  8. 《从强盗资本家到慈善家》--转载自思维的乐园
  9. linux磁盘管理的命令行,Linux磁盘管理命令
  10. python元组和集合的区别_python 元组与list的区别