电影微服务是服务消费者,用户微服务是服务提供者。

Springcloud对eureka的支持很好,eureka本身是一个基于REST的服务,

Eureka里面有一个注册表,Application Client是服务消费者,Application Service是服务提供者。Make Remote Call是远程调用,us-east-1c,us-east-1d,us-east-1e是zone,他们都属于us-east-1这个region。他们都是Eureka Client。

服务提供者(Application Service)和服务消费者(Application Client)启动的时候都会像eureka注册(ip和端口),他们更eureka server有一个心跳机制默认30秒,连续3次90秒没有收到心跳就会从注册表移除这个节点。Eureka service集群之间会相互复制服务注册表。

服务提供者的ip和端口变化了,服务注册表会更新ip和端口。

eureka client缓存:即使所有的eureka service都宕机了,服务消费者也会知道服务提供者的ip和端口进行调用。

服务注册表就是一个数据库,用来记录ip和端口,并且提供API操作服务注册表,把服务添加到注册表称之为注册从注册表移除称之为注销。

心跳机制是健康检查机制。

服务发现方式:客户端发现(Eureka,zk),服务端发现(Consul+nginx)。http://blog.daocloud.io/microservices-4/   SpringCloud对Eureka支持最完整。

Eureka:服务发现组件。

服务消费者:

package com.itmuch.cloud;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;//服务消费者
@SpringBootApplication
public class MicroserviceSimpleConsumerMovieApplication {@Bean //实例化了一个对象new RestTemplate,方法的名字rt就是实例化后bean的名字,其他地方通过@Autowired引用public RestTemplate rt() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(MicroserviceSimpleConsumerMovieApplication.class, args);}
}

package com.itmuch.cloud.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;import com.itmuch.cloud.entity.User;@RestController
public class MovieController {@Autowired  //初始化是启动类上面的@bean注解private RestTemplate rt;//使用RestTemplate调用//user: userServicePath: http://localhost:7900/simple///从yml文件读值.这里的ip和端口是写死的,有的时候服务提供者的ip和端口是变化的。//如果有多个提供者,如何做负载(nginx是可以做转发的,nginx通过url转发到不同的微服务),使用eureka(客户端发现机制)。@Value("${user.userServicePath}")private String userServicePath;@GetMapping("/movie/{id}")public User findById(@PathVariable Long id) {return this.rt.getForObject(this.userServicePath + id, User.class);}
}

package com.itmuch.cloud.entity;import java.math.BigDecimal;public class User {private Long id;private String username;private String name;private Short age;private BigDecimal balance;public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Short getAge() {return this.age;}public void setAge(Short age) {this.age = age;}public BigDecimal getBalance() {return this.balance;}public void setBalance(BigDecimal balance) {this.balance = balance;}}

yml:

server:port: 7901
user: userServicePath: http://localhost:7900/simple/

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.itmuch.cloud</groupId><artifactId>microservice-simple-consumer-movie</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>microservice-simple-consumer-movie</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>xalan</groupId><artifactId>xalan</artifactId><version>2.7.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

服务提供者:

package com.itmuch.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;//服务提供者
@SpringBootApplication
public class MicroserviceSimpleProviderUserApplication {public static void main(String[] args) {SpringApplication.run(MicroserviceSimpleProviderUserApplication.class, args);}
}

package com.itmuch.cloud.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;import com.itmuch.cloud.entity.User;
import com.itmuch.cloud.repository.UserRepository;@RestController//相当于加了@responseBody和@controller
public class UserController {@Autowiredprivate UserRepository userRepository;@GetMapping("/simple/{id}") //@GetMapping是@requestMapping(method=get)public User findById(@PathVariable Long id) {return this.userRepository.findOne(id);}
}

package com.itmuch.cloud.entity;import java.math.BigDecimal;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.AUTO)private Long id;@Columnprivate String username;@Columnprivate String name;@Columnprivate Short age;@Columnprivate BigDecimal balance;public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Short getAge() {return this.age;}public void setAge(Short age) {this.age = age;}public BigDecimal getBalance() {return this.balance;}public void setBalance(BigDecimal balance) {this.balance = balance;}
}

package com.itmuch.cloud.repository;import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;import com.itmuch.cloud.entity.User;//DAO
@Repository
public interface UserRepository extends JpaRepository<User, Long> {}

ymlserver:port: 7900
spring:jpa:generate-ddl: false     #启动的时候不打印sql语句show-sql: true      #显示sql语句hibernate:    #依赖hibernateddl-auto: none     #ddl语句的处理datasource:     #数据源platform: h2    #h2数据库schema: classpath:schema.sql  #建表语句data: classpath:data.sql    #数据
logging:level:root: INFOorg.hibernate: INFOorg.hibernate.type.descriptor.sql.BasicBinder: TRACE  #把参数打印出来org.hibernate.type.descriptor.sql.BasicExtractor: TRACEcom.itmuch: DEBUG

data.sql:

insert into user(id,username, name, age, balance) values(1,'user1', '寮犱笁', 20, 100.00);
insert into user(id,username, name, age, balance) values(2,'user2', '鏉庡洓', 20, 100.00);
insert into user(id,username, name, age, balance) values(3,'user3', '鐜嬩簲', 20, 100.00);
insert into user(id,username, name, age, balance) values(4,'user4', '椹叚', 20, 100.00);

schema.sql

drop table user if exists;
create table user(id bigint generated by default as identity,username varchar(40),name varchar(20),age int(3),balance decimal(10,2), primary key(id)
);

<?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.itmuch.cloud</groupId><artifactId>microservice-simple-provider-user</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>microservice-simple-provider-user</name><description>Demo project for Spring Boot</description><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.4.1.RELEASE</version><relativePath/></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-solr</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

springCloud--1相关推荐

  1. SpringCloud Alibaba微服务实战(七) - 路由网关(Gateway)全局过滤

    说在前面 全局过滤器作用于所有的路由,不需要单独配置,我们可以用它来实现很多统一化处理的业务需求,比如权限认证,IP 访问限制,监控,限流等等. 创建路由网关(Gateway)启动服务cloud-ac ...

  2. SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)

    什么是 Spring Cloud Gateway? Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Re ...

  3. SpringCloud Alibaba微服务实战(五) - Sentinel实现限流熔断

    什么是Sentinel? 请查看文章:SpringCloud Alibaba微服务实战(一) - 基础环境搭建 构建服务消费者cloud-sentinel进行服务调用 服务创建请查看文章:Spring ...

  4. SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心

    说在前面 Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台.Nacos Config就是一个类似于SpringCloud Config的配置中心. 一.启动N ...

  5. SpringCloud Alibaba微服务实战(三) - Nacos服务创建消费者(Feign)

    什么是Feign Feign 是一个声明式的伪 Http 客户端,它使得写 Http 客户端变得更简单.使用 Feign,只需要创建一个接口并注解.它具有可插拔的注解特性,可使用 Feign 注解和 ...

  6. SpringCloud Alibaba微服务实战(二) - Nacos服务注册与restTemplate消费

    说在前面 基础环境搭建,理论,请看上一篇,在这就不扯理论了,直接上代码. 项目结构 代码实现 第一步:在父pom的项目中引入dependencyManagement 在引入父pom之前咱们先来回顾下d ...

  7. SpringCloud Alibaba微服务实战(一) - 基础环境搭建

    说在前面 Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案.此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来 ...

  8. SpringCloud Feign声明式服务调用

    SpringCloud Feign声明式服务调用 1. 加入pom依赖 2. Application.java上声明@EnableFeignClients 3. @FeignClient声明接口调用服 ...

  9. SpringCloud + Consul服务注册中心 + gateway网关

    1  启动Consul 2  创建springcloud-consul项目及三个子模块 2.1 数据模块consul-producer 2.2 数据消费模块consul-consumer 2.3 ga ...

  10. 原 史上最简单的SpringCloud教程 | 第八篇: 消息总线(Spring Cloud Bus)(Finchley版本)

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springcloud/2018/08/30/sc-f8-bus/ 本文出自方志朋的博客 转载请标明出处: Spr ...

最新文章

  1. Scrum团队选择scrum看板工具的7点特征
  2. HttpClient乱码问题
  3. js bom window对象
  4. 设计模式之简介及其分类
  5. Java学习个人备忘录之线程间的通信
  6. SAP Smartforms 条码打印
  7. mysql怎么显示、查询现有数据库列表?(show databases;)怎么删除现有数据库?(drop database <库名>)
  8. LIVE555再学习 -- DM368/Hi3516A 交叉编译
  9. 写给大数据开发初学者的话4
  10. Atitit 基于dom的游戏引擎
  11. python中的序列类型数据结构元素的切片_第四章 Python字符串以及(split,rsplit,replace,strip.....)...
  12. 轻松获得网通、电信、铁通IP地址分配段
  13. sina邮箱的发件服务器拒绝,新浪帮助-常见问题
  14. [置顶]Win2012R2的一个Bug安装群集后可能引发的软件崩溃问题及相应补丁
  15. System.IO.Directory.Delete 方法的使用
  16. Windows Server 林功能级别详解
  17. webstorm快捷键大全
  18. 树莓派B+安装简单版魔镜MagicMirror
  19. 2020十大高薪资专业和十大高薪资岗位---(之我给程序员丢人了)
  20. 如何使用浏览器的网页全文翻译工具

热门文章

  1. 解决Linux动态库版本兼容问题
  2. Linux Shell 逻辑运算符、逻辑表达式详解
  3. eclipse删除perspective
  4. ubuntu 12.04安装 jdk
  5. 静态路由中使用一跳和出接口的区别
  6. vuex之state-状态对象的获取方法(三)
  7. 监控io性能,free命令,ps网络命令,查看网络状态,Linux下抓包
  8. SystemImager自动化安装Linux系统(下)
  9. Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做
  10. 虚拟服务器存储趋势对管理的影响