springcloud使用之服务的注册发现与消费
随着spring的发展我们发现spring提供了越来越多的项目来帮我们简化框架的搭建,使我们站在巨人的肩膀行走,让我们更关注于开发我们的逻辑。随着技术的更替,我们的新项目也逐渐使用了springboot来构建他们,对于老项目来说,有时候现有的架构越来越沉重,慢慢我们就会使用这些新技术慢慢来重构它,它可以帮我们省去很多配置,让我们更迅捷的开发。我们这篇文章讲解的是springcloud,但为什么要先提到springboot呢,因为它是基于springboot的一个项目,它包含了多个子项目,这些子项目融合了现在很多成熟的开源框架,来帮助我们完成我们的设计需要。在开始spring cloud之前我先说一下我遇到的场景。spring boot跟spring cloud这两个项目在我印象中两年前就很火了,然而那时候我们大部分小公司可能用的还是springmvc,spring,mybatis,我们做项目也是采用分布式的方式,通过dubbo跟zookeeper完成服务的注册与发现,随着技术的换代,我们新项目的项目决定使用spring boot来快速构建,项目中不同的业务采用微服务的架构风格使用spring cloud来进行通信调用,当时对于spring boot跟spring cloud的学习也没有应用,在使用新技术搭建项目的过程中萌生了写这篇文章的想法,巩固并记录,虽然有很多这种文章,但也希望我的文章也对你们有一点点的帮助。
在网上或者一些技术群里经常能看到几个词,soa、分布式、微服务,好多人也会问这些有什么区别。我对于他们的理接,soa是一种面向服务架构的方式,分布式是多个项目分布在不同的物理机上解决单体机构压力过大等一系列问题,微服务强调的是是一种架构风格,早在很早Martin Fowler就发表过一篇关于微服务的博客,他主要强调微服务是一种架构风格,他们之间采用http的轻量级通信,我在网上看到一个中文翻译过的https://www.jianshu.com/p/4821a29fa998,原文https://martinfowler.com/articles/microservices.html。它们之间也不能说完全有区别,但与不能说他们就是一个东西,它们强调的地方不同。这里话不多说,我们来开始使用spring cloud。
在使用spring cloud的时候我们发现他又很多版本,它不像其他spring的项目版本的命名,它的版本顺序从网上一搜很多介绍,我就不复制过来,还有m、sr等版本就不去介绍了。开始demo之前我们需要先了解一下spring cloud提供的相关组件,Eureka(百度百科):

由百度百科可以知道Eureka,他是netflix的一个服务发现框架,他被spring cloud整合到自己的项目里,他可以帮助我们完成服务的注册与发现,spring cloud还提供了其他的组建consul,因为spring将他们封装我们只需要添加一个注解将pom文件引入启动器就可以使用,这里我们使用Eureka来写demo,我们先来创建项目,我们可以通过https://start.spring.io/来创建项目导入编辑器,这里我们使用工具直接快速创建,原理还是去访问前面的地址帮我们创建项目:
打开idea,file-->new-->project



在我们的主启动类添加注解

@EnableEurekaServer注解意思代表我们使用Eureka作为服务注册中心,默认情况它会把自己当作服务注册到注册中心,我们需要在配置文件禁用该功能
然后我们启动项目,访问项目地址localhost:8881
访问项目发现现在还没有服务注册在上面,接下来我们创建一个服务的提供者并注册,按照上面的步骤继续创建项目,在主程序添加注解@EnableDiscoveryClient,这个注解的意思是让注册中心发现

配置文件

然后我们编写一个简单的求和方法

这里注意我们写的方法一定是放在主程序包下的,否则访问不到会提示404

启动项目发现服务的提供者已经注册上去了

现在服务的注册中心跟提供者都有了,我们需要在创建一个消费者,消费者调用我们写好的方法,输出结果。这篇文章会介绍几种服务的消费者,先以LoadBalancerClient为例写一个例子,创建一个新项目再主程序上添加注解@EnableDiscoveryClient,并添加文件:

配置文件:

再创建一个调用的controller

启动访问项目地址:

为什么这么写,这么用先不做介绍,后面的文章会分享为什么这么用,spring cloud做了什么。继续,现在把消费者换成Ribbon



访问项目

与上面的不同之处在于我们再RestTemplate上添加@LoadBalanced注解,controller只需要写服务的名字就可以调用到服务的提供者,这里简单说一下,我们把RestTemplate添加到容器中的是因为我们要使用spring cloud给我们提供的自动配置,spring boot的很多自动配置类都是***AutoConfiguration,原因在这,我们还是简单说一下,后面的文章再详细介绍,包括我们调用服务只写了服务的名字是因为拦截器帮我们把名称替换成了IP地址加上端口号的形式,它是怎么加上的这些这里先不做解释。下面继续介绍Feign,Feigin也可以帮我们完成我们的功能,当然他还整合了更多的更多功能,我们先来试一下Feign的使用
配置文件:

主程序:

创建一个controller跟service



访问项目

发现这样写就跟我们用dubbo差不多,通过注入服务的方法就能调用,这里面要注意的地方是你写的这个接口里的方法里面传的参数一定要指定参数名,否则启动项目会报一个错误


如果不指定参数也会报错


关于spring cloud服务的发现注册的使用就简单讲到这里,文章可以帮助没有了解spring cloud的新手上路,让你简单了解他如何使用,集中组件在写demo的时候你会发现什么样的更适合你,实际应用还需要更深入的了解我们所使用的组件。对于技术的学习我个人的习惯是先简单使用,再深化。文章只是对spring cloud组件的简单使用,在写过的demo中会发现spring cloud提供了很多组件来帮我们完成同样的事情,在我们实际应用中应该如何选择,这就是我们逐渐对组件深化的过程,然后看一下spring cloud做了什么,为什么需要我们这么使用,这就是我在了解一个技术的过程。文章的最后还是想说,虽然文章很简单,但也会存在很多不足的地方,希望大家不吝指教。
springcloud使用之服务的注册发现与消费的更多相关文章
- SpringCloud服务的注册发现--------Eureka
1,什么叫做服务的注册与发现 服务的注册与发现基于注册中心,注册中心本身是一个服务,也相当于一个载体,其他服务的注册需要注册到这个注册中心上. 注册:当服务器启动的时候,会将自己的服务器信息,通过别名 ...
- SpringCloud服务的注册发现--------zookeeper实现服务与发现 + Ribbon实现客户端负载均衡
1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能. zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能 2,工具准备 ...
- SpringCloud服务的注册发现--------Eureka自我保护机制
1,Eureka 自我保护机制 Eureka注册中心,一些服务会注册到Eureka 服务器上,例如之前的member服务,order服务. 在网络不通的情况下,如果一个bmember 挂了,但是Eur ...
- SpringCloud服务的注册发现--------Eureka实现高可用
1,Eureka作为注册中心,掌管者服务治理的功能,十分重要,如果注册中心的服务一旦宕机,所有的服务就会挂了,为此,实现注册中心的集群(高可用)就显得十分必要了 2,Eureka 搭建集群 实现原理就 ...
- 使用Apache Mesos和Consul实现服务的注册发现
为保证基于Docker应用程序和服务都具有高性能和可用性,设计出一种具有服务发现,高可用性和容错能力的解决方案非常重要. 我们使用Apache Mesos 和Mesosphere的 Marathon实 ...
- SpringCloud服务的注册发现--------consul实现服务与发现
1,consul也可以替代Eureka实现注册和发现的功能,即注册中心. 之前在linux环境通过consul + upsync + nginx 实现nginx 的动态负载均衡 https://www ...
- Nacos配置中心和服务的注册发现
在上一篇中,我们已经把Nacos的集群搭建好了,那么既然已经搭建好了,就要在咱们的项目中去使用.Nacos既可以做配置中心,也可以做注册中心.我们先来看看在项目中如何使用Nacos做配置中心. Nac ...
- springcloud如何实现服务的注册?
1.服务发布时,指定对应的服务名,将服务注册到 注册中心(eureka zookeeper)2.注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然 ...
- SpringCloud教程 | 第一篇: 服务的注册与发现
一.spring cloud简介 spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选.分布式会话等等.它运 ...
随机推荐
- C1010 unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source
提示说是预编译出现问题,提示添加头文件stdafx.h,但是添加了也会继续有其他错误解决方法: 在菜单Project->Properties(或者直接快捷键Alt+F7)->C/C++-& ...
- WinDbg常用命令系列---!handle
!handle 简介 !handle扩展显示有关目标系统中一个或所有进程拥有的一个或多个句柄的信息. 使用形式 用户模式!handle [Handle [UMFlags [TypeName]]] !h ...
- Theano入门笔记2:scan函数等
1.Theano中的scan函数 目前先弱弱的认为:相当于symbolic的for循环吧,或者说计算图上的for循环,也可以用来替代repeat-until. 与scan相比,scan_checkpo ...
- linux命令之------Tar解压缩
Tar解压缩 作用:将解压缩后缀名为tar的压缩包 -f<备份文件>或—file=<备份文件>指定备份文件 -v或-verbose显示指令执行过程 -x或-extract或-g ...
- 洛谷P2331[SCOI2005]最大子矩阵
题目 DP 此题可以分为两个子问题. \(m\)等于\(1\): 原题目转化为求一行数列里的\(k\)块区间的和,区间可以为空的值. 直接定义状态\(dp[i][t]\)表示前i个数分为t块的最大值. ...
- nbbnbnbnbnb
1.本章学习总结(2分) 1.1 学习内容总结 结构体的定义与赋值 结构类型定义的一般形式为: struct 结构名 { 类型名 结构成员1: 类型名 结构成员2: ... 类型名 结构成员3: }; ...
- Python实现 "反转字符串中的元音字母" 的方法
#coding=utf- def reverseVowels(s): """ :type s: str :rtype: str """ sS ...
- Beta冲刺(3/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践的报告 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估. ...
- [内网渗透]Windows中的用户帐户与组账户
0x01 用户帐户 1.1 简介 用户帐户是对计算机用户身份的标识,本地用户帐户.密码存在本地计算机上,只对本机有效,存储在本地安全帐户数据库 SAM 中. 文件路径:C: ...
- 高斯混合模型(GMM)及MATLAB代码
之前在学习中遇到高斯混合模型,卡了很长一段时间,在这里记下学习中的一些问题以及解决的方法.希望看到这篇文章的同学们对高斯混合模型能有一些基本的概念.全文不废话,直接上重点. 本文将从以下三个问题详解高 ...

