0622~springcloud

1.集群和分布式的区别:

集群:集群是指将同一份代码部署到多个服务器中;

分布式:分布式是指将系统根据不同业务分为多个模块,再把模块部署在不同的服务器上面;

2.Eureka工作原理

1.服务注册:所有服务只要启动,就会将自己的服务名、ip端口等信息提交到注册中心;

2.服务发现:服务每过30秒都会区注册中心拉去新的地址清单;

3.服务续约:服务每隔30秒都会向服务中心发送心跳;

4.服务下线:服务关闭时,注册中心会删除你的地址信息;

学习springcloud的原因:

1.springcloud是解决微服务的最佳落地方案;

2.springcloud默认集成了springboot,开发方便,使用简单;

3.springboot由spring开发,社区活跃,性能稳定;

4.springcloud优雅的解决了微服务架构中的许多问题(负载均衡,服务注册,路段器等);

什么是springcloud?

springcloud是基于springboot实现的服务治理包,解决了springboot在微服务中的各种问题;

简单来说:就是springboot快速开发一个微服务项目,springcloud就是解决spring boot在微服务中的问题;

微服务的优势:1.其中一个服务宕机,并不会影响其他服务的运行,高度解耦;

2.扩展性强,方便对局部服务进行扩展;

3.开发简单,程序员只用专注于一个模块;

4.轻量级http通讯协议,使得项目之间可以使用不同的编程语言开发,使用不同的数据库;

5.方便集成;

多模块之间的应用

1.单体项目:之间用Autwoired

2.模块项目:之间用jar包

3.微服务项目:之间用http通讯协议

Eureka实战:

项目搭建步骤:每个模块都是一个springboot项目

服务端

1.导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

2.启动类添加注解

@EnableEurekaServer//开启Eureka服务

3.yml配置

server:
  port: 1010
eureka:
  instance:
    hostname: localhost #主机IP
  client: #客户端配置
    registerWithEureka: false  #EurekaServer自己不要注册到EurekaServer自己 ,只有EurekaClient才注册
    fetchRegistry: false  #EurekaServer不要拉取服务的通信地址列表 ,只有EurekaClient才拉取地址列表
    serviceUrl:  #注册中心的注册地址
      defaultZone: http://localhost:1010/eureka/

 

 客户端:

1.导入依赖;

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

2.启动类添加注解;

@EnableEurekaClient//注册客户端

3.yml配置

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:1010/eureka/
  instance:
    prefer-ip-address: true #使用ip地址进行注册
    instance-id: order-server:1030 #实例ID
spring:
  application:
    name: order-server
server:
  port: 1030

服务端之间的通讯协议: RestTemplate

@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){

    return new RestTemplate();
}

 用订单作为例子:

@GetMapping("/getUserById/{id}")
public User getUserById(@PathVariable("id")Long id){
    String url = "http://user-server/user/getUserById/"+id;
    ResponseEntity<User> forEntity = restTemplate.getForEntity(url, User.class);
    return forEntity.getBody();
}

 用户发送订单请求,订单再根据用户id拿到用户对象,如果用户模块做了集群,则Eureka满足不了需求,此时Ribbon就出现了,完美的解决了用户模块集群的问题;

使用Ribbon步骤

1.导入依赖

2.RestTemplate加注解 @Loadbalanced  

此时就完美解决了用户集群的问题,默认分发方式为轮询;

如果使用其他模式需手动配置
//随机模式
//@Bean
//public RandomRule getRandomRule(){
//    return new RandomRule();
//}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值