当前位置: 首页 > news >正文

Spring-cloud 主键Eureka

一,引入

书接上文,之前完成了一个订单项目,一个商品项目.但是当你访问一个订单的时候,订单里面就会包括商品的内容,由此我们需要对代码做出一些改变,这里就涉及到了两个子项目的通信问题,这里使用RestTemplate解决

在order-service里面创建一个product实体类,并且在order实体类中添加

private ProduceInfo produceInfo;

这时需要用到RestTemplate类,我们先创建一个 RestTemplate 实例并交给 Spring 容器管理,这样可以在整个应用中通过依赖注入使用(创建一个配置的包,在里面进行书写)

@Configuration
public class BeanConfig {@Beanpublic RestTemplate restTemplate(){return new RestTemplate();}
}

修改order-service里面的service层的代码:

@Slf4j
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url="http://127.0.0.1:9090/product/"+orderInfo.getProductId();ProduceInfo produceInfo = restTemplate.getForObject(url, ProduceInfo.class);orderInfo.setProduceInfo(produceInfo);return orderInfo;}
}

二, RestTemplate

是支持HTTP请求的工具.REST(表现层资源状态转移:资源:网络上的数据,例如图片,视频,文本等。表现层:资源的表现形式(例如:文本是txt,图片是jpg,还有一些资源是json,xml等等)状态转移:通过网络访问资源,对资源进行修改(增加,修改删除等等)都会引起状态转移)

RESTful:REST是一种设计风格,RESTful就是满足了REST风格的接口或者程序

RestTemplate是Spring提供的,封装HTTP调用,并强制使用RESTful风格,他会处理HTTP连接或者关闭,只需要使用者提供资源的地址和参数

RESTful缺点:操作繁琐,通常RESTful api根据get,post,delete来区分对资源的操作,但是这是不可见的,只能通过抓包工具.有些浏览器对于get和post请求以外的的支持不是很友好,需要进行额外处理

三, 注册中心

服务的提供者:被其他微服务调用的服务

服务消费者:调用其他微服务的服务

服务注册中心:用于保存service的注册信息,当service节点发生变动时,Registry会同步变更

服务注册:在服务提供者启动的时候,向Registry注册自身服务,并向Registry定期发送心跳回报存活状态;

服务发现:服务消费者从注册中心查询服务提供者的地址,并通过该地址调用服务提供者的接口

CAP理论,分布式最基础,最重要的理论:

-------------------------------------------------------------------------------------------------------------------------
C(Consistency):一致性,指的是强一致性(以数据库进行举例,主库和从库无论何时,数据都保持一致性)弱一致性:随着时间的推移,最终主库和从库保持一致
A(Availablility):可用性,对所有请求都有响应,这个响应可能是错误的数据
P(Partition tolerance):分区容错性,在网络分区的情况下,系统依然可以对外提供服务

因为P是一定要保证,所以A和C只能二选一。所以我们的架构为CP架构或者AP架构

常见的注册中心:①zookeeper,②Eureka已经停止维护了。但是是springcloud的默认注册中心,③Nacos阿里巴巴提供的,功能非常强大,除基础功能外还有配置管理,流量管理,动态DNS等多种特性

四, Eureka

搭建Eureka service

① 创建项目

② pom加入eureka的依赖

③配置文件,增加eureka的相关配置

④启动类,开启eureka相关的功能-->使用@EnableEurekaServer 

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
# Eureka 服务
server:port: 10010
spring:application:name: eureka-server
eureka:instance:hostname: localhostclient:fetch-registry: false # 表示是否从Eureka Server获取注册信息,默认为true.因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,这里设置为falseregister-with-eureka: false # 表示是否将自己注册到Eureka Server,默认为true.由于当前应用就是Eureka Server,故而设置为false.service-url:# 设置Eureka Server的地址,查询服务和注册服务都需要依赖这个地址defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
@SpringBootApplication
@EnableEurekaServer //开启服务
public class EurekaServiceApplication {public static void main(String[] args) {SpringApplication.run(EurekaServiceApplication.class,args);}
}

启动启动类:

服务注册

①加入Eureka依赖

②修改配置信息

③启动测试

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
#Eureka Client
eureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka/
spring:application:name: product-service

重新启动Eureka-service的启动类

服务发现

① 加入Eureka依赖

②修改配置信息

③修改远程调用代码

④启动测试

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>
#Eureka Client
eureka:client:service-url:defaultZone: http://127.0.0.1:10010/eureka/
spring:application:name: order-service
    @Autowiredprivate DiscoveryClient discoveryClient;public OrderInfo selectOrderById(Integer orderId){OrderInfo orderInfo = orderMapper.selectOrderById(orderId);//从Eureka中获取服务列表List<ServiceInstance> instances = discoveryClient.getInstances("product-service");String uri = instances.get(0).getUri().toString();String url=uri+"/product/"+orderInfo.getProductId();ProduceInfo produceInfo = restTemplate.getForObject(url, ProduceInfo.class);orderInfo.setProduceInfo(produceInfo);return orderInfo;}

重新启动Eureka-service的启动类

五,Eureka和zookeeper有什么区别

1. Eureka是Netflix开源的项目,Zookeeper是Apache开源的项目.
2. Eureka基于AP原则,保证高可用, Zookeeper基于CP原则,保证数据⼀致性.
3. Eureka每个节点都是均等的,Zookeeper的节点区分Leader和Follower或Observer,也正因为这个原因,如果Zookeeper的Leader发生故障时,需要重新选举,选举过程集群会有短暂时间的不可用

六,完整代码链接

海豚/SpringCloud - Gitee.com 完整代码https://gitee.com/ABdolphin/spring-cloud/tree/master/spring-cloud-eureka

http://www.dtcms.com/a/570892.html

相关文章:

  • 宜兴公司做网站高端 网站定制
  • 成都营销型网站建设推广怎么建设国外免费网站
  • 算法72. 编辑距离
  • 制作网站的软件下载金科做的网站
  • 黑龙江省建设工程招标网站外包网有哪些
  • 织梦做的网站为什么显示404临沂做网站哪里好
  • 做美食教程的网站有哪些快速排名优化推广价格
  • 本地佛山顺德网站建设外贸求购信息网
  • 专业新站整站快速排名公司windows2008 iis 网站
  • 从计数器到令牌桶:三种限流方案的落地与取舍
  • 信号与槽
  • 定制型网站建设移动网站mip
  • 网络系统管理与维护形考任务2sem优化软件选哪家
  • 小语种网站自己做网站能赚钱
  • 自己学习建设网站做老托福听力的网站
  • 设计商城网站建设服装设计参考网站
  • wordpress格式化sql串天津网络优化网站建设
  • 如何检测网站的打开速度游戏小程序开发报价
  • 网站被k原因网站设置关键字
  • VQ-VAE 代码详细解析及记录
  • 网站建设技术公司企业公示信息查询官网
  • 温州网站建设得花多少钱做自媒体挣钱的网站有哪些
  • p2p网站建设公司wordpress心情
  • pageadmin自助建站专业网页设计制作价格
  • 东莞智通人才网官方网站泉州网站公司
  • qq钓鱼网站在线生成器北京网站设计优刻
  • 诊断服务_0x10和0x11服务
  • 南宁良庆网站建设台州大型网站建设
  • Dirichlet分布的理解与应用
  • 站长工具友链查询科技感设计感的展厅