微服务和SpringCloud介绍

1.什么是微服务?

看过一遍介绍的很清楚的博客:https://blog.csdn.net/wuxiaobingandbob/article/details/78642020

微服务得从两个方面去理解,什么是"微"、什么是"服务"。

:狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2个披萨 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。

服务:一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。

2.为什么要使用微服务

在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。到后面引入了SOA服务化,但是,由于 SOA 早期均使用了总线模式,这种总线模式是与某种技术栈强绑定的,比如:J2EE。这导致很多企业的遗留系统很难对接,切换时间太长,成本太高,新系统稳定性的收敛也需要一些时间。最终 SOA 看起来很美,但却成为了企业级奢侈品,中小公司都望而生畏。

3.微服务的开发框架

目前微服务的开发框架,最常用的有以下四个:

  1. Spring Cloud:http://projects.spring.io/spring-cloud(现在非常流行的微服务架构)

  2. Dubbo:http://dubbo.io

  3. Dropwizard:http://www.dropwizard.io (关注单个微服务的开发)

  4. Consul、etcd&etc.(微服务的模块)

4.什么是SpirngCloud

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

5.Spring、SpringCloud和SpringBoot的关系

Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系。

  spring -> spring boot > Spring Cloud 这样的关系。

普通的两个程序直接的访问

使用IDEA开发工具。

1.新建一个maven的父工程 ,并创建提供者工程和消费者工程。

2.将项目设置成springBoot项目,并添加对应的依赖。

  • 设置parent项目的pom.xml
  • <?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> <groupId>com.aomeibox</groupId>
    <artifactId>springclouddemo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
    <module>provider-user</module>
    <module>customer-order</module>
    </modules> <!-- 设置成springBoot项目 -->
    <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    </parent> <!-- SpringBoot依赖 -->
    <dependencies>
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency> <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    </dependency> <dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    </dependency> </dependencies>
    <build>
    <plugins>
    <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    </plugins>
    </build> </project>
  • 设置提供者,设置成web工程,并且添加controller类和yml配置文件,端口和名称修改,防止端口被占用。设置一个user对象,属性和provider中相同
 /**
* Created by leo on 2018/12/24.
*/
@RestController
public class UserController { @GetMapping("/user/{id}")
public User getUser(@PathVariable Integer id){
return new User(id);
}
}
server:
port: 7900 #程序启动后的端口 spring:
application:
name: provider-user #应用名称
  • 设置消费者,也需要设置成web工程,并且添加controller类和yml配置文件。设置一个user对象,属性自己设置即可。
@SpringBootApplication
public class CustomerOrder
{ @Bean //相当于xml的bean标签,主要用于调用当前方法获取到指定对象
public RestTemplate template(){
return new RestTemplate();
} public static void main( String[] args )
{
SpringApplication.run(CustomerOrder.class);
}
}
@RestController
public class OrderController { @Autowired
private RestTemplate template;//spring提供的一个用于访问rest接口的模板对象
private String url = "http://localhots:7900/user/"; @GetMapping("/order/{id}")
public User getUser(@PathVariable Integer id){
//访问提供者获取数据
User user = template.getForObject(url + id, User.class);//通过访问rest 获取到json数据,然后转换成User对象 return user;
}
}

这样就可以通过一个消费者,去访问服务提供者获得数据。(未使用springcloud)。

最新文章

  1. AutoMapper简单用法
  2. Nginx与Lua利用fpm打成rpm包
  3. junit单元测试中私有方法测试
  4. CSS3初学篇章_2(伪类选择符)
  5. 明风:分布式图计算的平台Spark GraphX 在淘宝的实践
  6. 使用sql生成UUID
  7. 第三届蓝桥杯Java高职组决赛第一题
  8. 4位开锁&lt;dfs&gt;
  9. Django 缓存系统
  10. Android ListView getViewTypeCount 的返回值问题解决
  11. 利用Angular实现多团队模块化SPA开发框架
  12. eclipse项目环境搭建(做了好多遍,老是忘记,以此文帮助记忆)
  13. 整理学习ASP.NET MVC的资源
  14. Linux下JDK到底应该安装在哪儿?
  15. 什么是Session分布式共享
  16. listview 两个Item可以同时点击
  17. WSGI简介
  18. 手动制作用于启动BeagleBoneBlack(am335x)的SD
  19. List多个字段标识过滤
  20. 快速排序_c++

热门文章

  1. 理解题意后的UVa340
  2. 创建dynamics CRM client-side (一) - Client-side Events
  3. &lt;td colspan=&quot;6&quot;&gt;&lt;/td&gt;代表这个td占6个td的位置
  4. 路飞学城Python-Day140
  5. 【真·干货】MySQL 索引及优化实战
  6. css中的流,元素,基本尺寸
  7. crontab 设置定时任务
  8. uni-app 之验证码
  9. PHP学习总结(7)——PHP入门篇之PHP注释
  10. C/C++ 文件路径解析