专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

从零开始搭建公司SpringCloud架构技术栈,这套架构绝

  一、微服务基础1。什么是SpringCloud?
  SpringCloud官网:https:spring。ioprojectsspringcloud(个人建议是用谷歌浏览器访问官网打开中文翻译粗略把官网读一遍)
  个人理解:
  以前的服务器就好像,一个会语数外全能的老师,为学生提供服务,这个老师生病了,那全校停课。现在微服务流行后,学校有了数学教研组,语文教研组,外语教研组,每个教研组有一群老师具体负责某科的教学,缺了谁,学校都照样运转。
  而这个变化中,那些改变历史的程序员就是把一个服务器中的众多服务,或好几台服务器中的众多服务,分类出来,解耦合出来,把他们类似的功能交给同一个集群来做,把互相耦合在一起的功能剥离出来,按业务,按功能来把他们作为一个个微服务放在服务器上,而这个服务器就只提供一个服务,或较少的服务。让一个超大的服务逻辑,解耦合为一个个小服务,均匀的分布在各自的服务器中。微服务就微在这。
  每个教研组就是一个微服务集群。他们提供同样的服务,而注册中心Eureka就是这个存放这个教研组老师名单的地方,学生们想先访问这个注册中心获取教师名单,然后根据相应的负载方法去访问各自老师。不至于让集群中某一老师累死也不至于让某一老师闲死。
  而Zuul网关呢,就是学校的门卫,某些学生来学校找谁,它负责指引(路由),并且通过一些非常简单的配置,达到阻拦一些人进入(身份验证),或者控制想学数学的人只能去数学教研组,不能去核能教研组学怎么造原子弹(权限验证)。
  那Hystrix熔断器呢,可以把它当成学校的志愿者,当一个教研组集体罢课后,学生找不到老师了,这些志愿者及时的告诉来访问的学生,相应的结果,异常信息等,免得大量的学生在学校等待,这些志愿者赶快把这些等待的学生梳理出去,学生一直在学校等待,那其他需要学生的学校,也会等待学生,最后造成大面积的学校瘫痪。这里学生我们看成一个个请求。熔断器就是把某事故的蔓延即使熔断了。
  当然这些组件也是微服务需要注册到Eureka注册中心
  那SpringCloud就可以看成是这个学校了。众多上面提到的组件相当于都是这个学校的各职能部门。二、微服务的搭建
  ps:博主基于Mavenidea搭建。
  另外SpringCloud需要基于springboot搭建。
  引入SpringBoot相关依赖:这里的springboot用的是1。5。7版本;引入SpringCloud相关依赖:这里为Edgware。SR52。1工程初始化配置
  在Idea中创建工程:FileNewProject
  点击EmptyProjectNext
  项目命名项目位置
  选择模组modulesnext
  进入新的窗口后,开始配置Maven,打开设置setting
  因为我之前做过配置,因此只需要改变框1的路径,如第一次配置需要自己找到你maven放置的位置,以及settings。xml,repository的位置,实在不会的百度maven集成idea
  3个框选择完毕后点击ok
  接下来新建module
  这里可能会出现加载不出archetypelist的问题
  用了网上的所有解决办法花了3个小时解决都没用,重启之后竟然可以了你敢信?????小时候网吧网管的至理名言都忘了!!重启一下嘛!!
  出来之后选择quickstart下一步
  名字自己想想好后,复制一下你想好的ArtifactId点击Next,groupId为组织名也是自己想一个,一般为公司网址反写。
  粘贴后下一步
  提供注册服务的服务器pom。xml配置如下:lt;?xmlversion1。0encodingUTF8?projectxmlnshttp:maven。apache。orgPOM4。0。0xmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:maven。apache。orgPOM4。0。0http:maven。apache。orgxsdmaven4。0。0。xsdmodelVersion4。0。0modelVersiongroupIdcom。yungroupIdspringcloudeurekaserverartifactIdversion1。0SNAPSHOTversionnamespringcloudeurekaservername!FIXMEchangeittotheprojectswebsiteurlhttp:www。example。comurlpropertiesproject。build。sourceEncodingUTF8project。build。sourceEncodingmaven。compiler。source1。7maven。compiler。sourcemaven。compiler。target1。7maven。compiler。targetproperties!引入springbootparent父项目parentgroupIdorg。springframework。bootgroupIdspringbootstarterparentartifactIdversion1。5。7。RELEASEversionparentdependencies!引入springcloud的euekeaserver依赖dependencygroupIdorg。springframework。cloudgroupIdspringcloudstarternetflixeurekaserverartifactIddependencydependencies!指定下载源和使用springcloud的版本dependencyManagementdependenciesdependencygroupIdorg。springframework。cloudgroupIdspringclouddependenciesartifactIdversionEdgware。SR5versiontypepomtypescopeimportscopedependencydependenciesdependencyManagementproject
  点击ImportChanges
  等待右下角加载springcloud的依赖
  2。2Springboot的搭建以及提供注册服务的服务配置
  创建resources文件夹
  并设置作为资源根目录,之后文件变成这样
  之后文件夹变成有黄色的横杠
  在resources下新建文件,文件名为application。yml(对是yml不是xml,博主第一次学习时,还以为是其他博主打错了,踩了一个小坑)
  配置yml,注意:如果只配置前两行端口号信息会报错
  server:port:8700端口自己决定指定当前eureka客户端的注册地址,也就是eureka服务的提供方,当前配置的服务的注册服务方eureka:client:serviceurl:defaultZone:http:{eureka。instance。hostname}:{server。port}eurekaregisterwitheureka:false自身不在向eureka注册fetchregistry:false启动时禁用client的注册instance:hostname:localhost指定应用名称spring:application:name:eurekaserver
  知识补充:
  开发springboot的入口类EurekaServerApplication。java
  EurekaServerApplication。javapackagecom。yun;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。cloud。netflix。eureka。server。EnableEurekaServer;SpringBootApplicationEnableEurekaServer当前使用eureka的serverpublicclassEurekaServerApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(EurekaServerApplication。class,args);}}
  右键运行当前类:
  运行成功console画面
  尝试进入eureka管理界面端口号为yml里配置的(端口号自己设置需要大于公用和保留的端口号)102465535
  一般我喜欢设置为8700到8800之间
  如下管理界面已经可以登录了。
  2。3客户端client提供真正服务的角色的配置,它提供服务在服务注册方server(注册中心)进行注册
  同样新建module,选择quickstart点击下一步
  两个位置置空
  取名下一步
  注意这里要在根目录springcloud下创建模组,contentroot会默认在之前的模组之下创建模组这样创建模组会出现问题并报错
  推荐这种配置方法在contentroot下springcloud后改名字如下图配置点下一步,红框处一般默认为上一个模组的文件目录名,需要改为你的模组名
  成功后为并列状态,如不为并列或报错请重新配置
  配置servicesupport的pom,与server的pom配置相同,只需要把第一个pom的1的方框处server改为client
  和第一个微服务同理我们需要配置入口类pom。xmlapplication。yml,因为是服务提供者,这里还需编写服务类controller
  application。ymlserver:port:8701服务提供方指定当前eureka客户端的注册地址,eureka:client:serviceurl:defaultZone:http:{eureka。instance。hostname}:8700eurekainstance:hostname:localhost当前服务名称spring:application:name:eurekaservice
  pom。xml:
  编写所提供的服务controller:packagecom。yun;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;RestControllerRequestMapping(Hello)publicclassController{RequestMapping(World)publicStringhelloWorld(Strings){System。out。println(传入的值为:s);return传入的值为:s;}}
  入口类并运行此微服务:packagecom。yun;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。cloud。client。discovery。EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClient代表自己是一个服务提供方publicclassEurekaServiceApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(EurekaServiceApplication。class,args);}}
  右键入口类名点击run(当然开启此服务时需要先开启server服务就是我们第一个编写的微服务)
  此时再进入服务注册的页面http:localhost:8700
  可以看见服务提供者已被注册进服务注册者
  在直接访问一下服务提供者的网络位置http:localhost:8701HelloWorld?s小沛
  我们已经看见可以访问了,证明此微服务可用。
  但是我们一般不直接调用所需的微服务,而是经过提供注册服务的服务器server,获取所需的服务提供者列表(为一个列表,此列表包含了能提供相应服务的服务器),他们也许是个集群,因此server会返回一个ip端口号的表,服务消费者通过相应算法访问这表上的不同服务器,这些服务器提供的是相同的服务,这种在服务消费者一方挑选服务器为自己服务的方式是一种客户端的负载均衡。
  目前博主所知的有轮询和随机两种方式访问这些服务器,轮询就是循环的意思,假如有3台服务器,访问方式就是1,2,3,1,2,3,1,2,3,随机就是随机,回想一下random方法,一种无规律的方式。这两种方式都是为了,访问每个服务器的可能性尽量的相同。还有权重负载这种算法,意思就是根据服务器负载能力的分配相应的服务。能力大的干得多。能力小的干得少。2。4服务的调用方式
  第一种调用方式:restTemplateribbon
  第二种调用方式:feign
  2。4。1restTemplateribbon
  ribbon是一种负载均衡的客户端,它是什么呢?请详读https:www。jianshu。comp1bd66db5dc46
  可以看见其中的一段如下:
  而客户端负载均衡和服务端负载均衡最大的不同点在于上面所提到服务清单所存储的位置。在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心,比如上一章我们介绍的Eureka服务端。同服务端负载均衡的架构类似,在客户端负载均衡中也需要心跳去维护服务端清单的健康性,默认会创建针对各个服务治理框架的Ribbon自动化整合配置,比如Eureka中的org。springframework。cloud。netflix。ribbon。eureka。RibbonEurekaAutoConfiguration,Consul中的org。springframework。cloud。consul。discovery。RibbonConsulAutoConfiguration。在实际使用的时候,我们可以通过查看这两个类的实现,以找到它们的配置详情来帮助我们更好地使用它。
  接下来我们来搭建基于ribbon的客户端,他用于消费服务。
  同理先搭建springboot的环境
  与之前搭建servicesupport不同的是:
  第一步:现在pom中需要在dependencies中添加ribbon依赖dependencygroupIdorg。springframework。cloudgroupIdspringcloudstarterribbonartifactIddependency
  第二步:yml如下配置:server:port:8702服务消费方指定当前eureka客户端的注册地址,eureka:client:serviceurl:defaultZone:http:{eureka。instance。hostname}:8700eurekainstance:hostname:localhost当前服务名称spring:application:name:eurekaconsumer
  服务的消费方依旧需要在注册方8700端口去注册。配置当前服务消费方的端口8072,名字为eurekaconsumer
  第三步:依旧需要启动类,因为它是一个springboot的架构:packagecom。yun;importorg。springframework。boot。SpringApplication;importorg。springframework。boot。autoconfigure。SpringBootApplication;importorg。springframework。cloud。client。discovery。EnableDiscoveryClient;SpringBootApplicationEnableDiscoveryClient当前使用eureka的serverpublicclassEurekaConsumerApplication{publicstaticvoidmain(String〔〕args){SpringApplication。run(EurekaConsumerApplication。class,args);}}
  如上图:
  我们需要一个controller类来编写ribbon的代码。packagecom。yun。controller;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。cloud。client。ServiceInstance;importorg。springframework。cloud。client。loadbalancer。LoadBalancerClient;importorg。springframework。web。bind。annotation。RequestMapping;importorg。springframework。web。bind。annotation。RestController;importorg。springframework。web。client。RestTemplate;RestControllerRequestMapping(Hello)classConsumerController{AutowiredprivateLoadBalancerClientloadBalancerClient;AutowiredprivateRestTemplaterestTemplate;RequestMapping(Consumer)publicStringhelloWorld(Strings){System。out。println(传入的值为:s);第一种调用方式StringforObjectnewRestTemplate()。getForObject(http:localhost:8071HelloWorld?ss,String。class);第二种调用方式根据服务名获取服务列表根据算法选取某个服务并访问某个服务的网络位置。ServiceInstanceserviceInstanceloadBalancerClient。choose(EUREKASERVICE);StringforObjectnewRestTemplate()。getForObject(http:serviceInstance。getHost():serviceInstance。getPort()HelloWorld?ss,String。class);第三种调用方式需要restTemplate注入的方式StringforObjectrestTemplate。getForObject(http:EUREKASERVICEHelloWorld?ss,String。class);returnforObject;}}
  我们常用第三种调用方式。
  第一种是直接调用:不经过注册中心那服务列表,直接访问的servicesupport
  第二种:是根据服务名选择调用,如上图需要做如下注入
  Autowired
  privateLoadBalancerClientloadBalancerClient;
  如上图代码中第二种调用方法的代码所示。
  用服务名去注册中心获取服务列表,当前客户端底层会做随机算法的选取获得服务并访问。
  第三种需要一个Bean的注解自动注入并直接调用restTemplate对象调用服务。底层调用模式与第二种调用方式一样。如下:packagecom。yun。beans;importorg。springframework。cloud。client。loadbalancer。LoadBalanced;importorg。springframework。context。annotation。Bean;importorg。springframework。context。annotation。Configuration;importorg。springframework。web。client。RestTemplate;ConfigurationpublicclassBeans{管理简单对象BeanLoadBalancedpublicRestTemplategetRestTemplate(){returnnewRestTemplate();}}
  Bean注解告诉工厂,这个方法需要自动注入。
  LoadBalanced,表示需要做负载匀衡。
  然后如controller中一样注入一下restTemplate,并且使用他,区别是可以直接使用服务名访问了
  StringforObjectrestTemplate。getForObject(http:EUREKASERVICEHelloWorld?ss,String。class);
  开始测试:
  1。运行server的启动类:
  2。运行servicesupport的启动类:
  3。运行serviceconsume的启动类:
  浏览器访问:
  8072为服务消费方的端口
  访问方法解析:访问服务消费方RequestMapping指定的路径及消费方的端口来访问消费方的controllercontroller根据服务名去server方获取获取服务列表,获取服务列表后根据随机的模式负载匀衡后去选择服务地址去访问servicesupport:如下图
  更新于星期日2018年12月30日20:02待续。。。。
  待续。。。2。5Eurekaserver的高可用配置
  点击下图配置
  接下来配置三台01,02,03的虚拟机参数
  01:8699
  02:8698
  03:8697
  之后点ok保存,可看见多出三个启动项
  接下来分别改注册端口号,defaultZone分别启动三个启动项
  打开server的yml配置,删掉前两行端口号配置(图中有错,请把instance和hostname那两行删掉)
  配置好yml后点击启动
  同理,我们再次改动端口号为8699和8697后,把启动项改为02,之后启动(图中有错,请把instance和hostname那两行删掉)
  同理把yml端口改为8699和8698后,把启动项改为03,之后启动(图中有错,请把instance和hostname那两行删掉)
  启动后分别访问三个01,02,03端口,已经可以看见可以访问了。
  打开服务提供方的yml配置如下,把端口号改为三个中其中的一个。
  启动服务提供方之后,再次访问三个01,02,03我们会发现
  重点:即使服务提供方只注册了一个端口号8699,但是另外两个端口号,也能感知到服务提供方8701的存在了。如下图:
  接下来像服务消费方中添加服务注册者的端口号,这样在server挂掉任何一个的时候,都能有其他的server也能获取服务列表
  访问以下服务消费方,发现可以通过消费方调用server服务列表并且访问service了
  我么随便关闭其中两个server的副本,重启serviceconsume,再进行访问。必须重启serviceconsume才能清空缓存,清掉consume里面有的服务列表。
  上图发现即使关闭两台server后依旧可以访问,如下图,依旧从server中获取了服务列表,从中也能看见之后不用再获取服务列表了。
  但是当我们关掉所有server后。访问还是没问题,因为缓存了服务列表。
  但是让我们来重启一下serviceconsume,再访问就不行了。

为避粉红税,JK智取老头衫朋友们,天下苦女装贵久矣。收入越倒退,女装越昂贵。一件远看平平无奇近看公园前15块一件的老头背心,放在女装领域是可以卖好几百的。如果再打上小众设计师的title您猜价格会发展到哪里不敢穿出门的透视纱裙,正逐渐侵占时尚圈近日来热火朝天的时装周,女性主义的浪潮似乎变得前所未有的强烈,大量设计师与品牌都通过透视的手法,让女性对自己拥有更多掌控和选择权。薄如蝉翼般的薄纱裙,这般凸显女性身体之美的时装,被再读鲁迅的从百草园到三味书屋,懂了三味,已是中年!小时候读过的鲁迅的文章,你还记得吗?比如从百草园到三位书屋,对于当年的我,泥墙根的意义就远远大于中心思想,可今天再重新细读这篇文章,我才懂了文字中隐藏的那些人生的道理,这是当年那个春日里的中国丨甘肃民勤红崖山水库成候鸟天堂央广网武威3月22日消息(记者李红军)阳春三月,位于甘肃省武威市民勤县地处石羊河下游的亚洲最大沙漠水库红崖山水库,迎来大批白琵鹭灰鹤凤头鸊鷉苍鹭大雁等候鸟游弋觅食追逐嬉戏展翅翱翔。边城湘西特有的风土人情,凸显人性的善良美好与心灵的纯净边城,就是沈从文美丽而带点伤感的恋乡梦,是沈从文理想和诗意的世界。茶峒地方靠水依山筑城,临水一面则在城外河边留出些地筑码头,河湾停泊着小小的篷船,那条河便是历史上知名的酉水,水中游父子血型怎样辨别亲生?父子血型是一种用来辨别亲生关系的方法。通过对父亲和孩子的血型进行比较,可以判断孩子是否为亲生子女。那个人不能单纯的只看父亲的血型。这种方法在司法鉴定和家庭争议解决中都有广泛应用。本失眠人不妨一试美国预防杂志曾刊登一项研究,结果表明穿袜子睡觉的人,不仅容易入睡更快,而且总睡眠时间整体增加,睡眠质量得到一定的提高。(来源九派新闻)但也有专家表示,虽然穿袜子睡觉一定程度上可以提中老年人选牛奶好还是驼奶好?对于中老年人来说,身体吸收营养的能力会大大下降,为了照顾孱弱的肠胃,对于营养高的食物想吃又不敢吃,稍微油腻一些就会造成腹泻呕吐等情况的出现。因此较多的中老年人将补充营养的希望转移到想要大肚腩消失,记得多吃7种食材,低热量高营养,悄悄瘦下来流年似水,岁月如歌。时间总是在不经意间流逝,转眼间我们就告别了白雪皑皑的冬天,迎来百花绽放的春季。虽然春风拂面阵阵花香让人流连忘返,但是抵不过高跟鞋连衣裙的诱惑,特别想美美哒置身于NBA球衣进化史费城76人队锡拉丘兹民族队时期费城76人队是NBA的元老球队,刚成立时名为锡拉丘兹民族队。民族队早期主场球衣是白色,胸前是红色手写体的的Nats字样,衣服侧面及领口是间断的红色条纹设计,在早期那不勒斯欲以1。5亿出售奥斯梅恩三大豪门皆对其有意据法媒footmercato的消息称,那不勒斯希望能够以1。5亿欧元的价格出售当家射手奥斯梅恩,而包括切尔西曼联和巴黎圣日耳曼都对于这笔交易很感兴趣。虽然巴黎圣日耳曼渴望签下奥斯梅
肠绞痛和肠胀气是一回事吗?妈妈了解清楚这些,才可以避免撰稿镜子对于一个小宝宝来说,他们的肠道是非常脆弱的,新生期03个月的阶段也是一个孩子的肠胀气的高发期,另外每年的二月也是宝宝肠胀气的高发期,这时候宝宝的表现是不断哭闹的,而且是哄不今日欧美明星时尚街拍图集(2023年2月22日)今日欧美明星时尚街拍图集(2023年2月22日)时尚欧美明星的街拍就是行走在马路上的秀场,明星们的街拍就是时尚界的潮流风向标。明星们身穿什么牌子的衣服肩背什么大牌包包,脚蹬什么潮流改变人生观我誓言从二零二三年二日一号起,改变人生观,忘记过去,丢掉旧观念,树立好思想,保护自己,加强锻炼,争取健康地活下去,展望未来,来个老来红的好局面,不该想的想也没用。让儿孙们发达,本人三职业传奇自由之刃2怎么打宝三职业传奇自由之刃2怎么打宝小伙伴们大家好今天继续讲自由之刃2王城争霸这款在1的基础上更是,满满福利满级会员免费送做任务得魂环可打金猪爆充值每日灵符兑换,好了,言归正传以上图片来自致敬国乓重温历史,半岛观影团邀请影迷观看中国乒乓之绝地反击,一起进入热血温馨的体育世界逆风翻盘,绝地反击。中国兵乓球作为国球在中国人心中有着非比寻常的意义,也包含了一路来中国兵乓球事业的酸甜苦辣。电影中国乒乓之绝地反击由邓超俞白眉导演,联手邓超孙俪许魏洲段博文等实力今日申购四川黄金播恩集团来源中国经济网四川容大黄金股份有限公司保荐机构(主承销商)中信建投证券股份有限公司发行情况公司简介公司是一家长期专注于金矿资源开发及综合利用的企业,主要从事金矿的采选及销售,主要产创意海报来看看秦始皇西巡打卡地公元前221年,秦始皇嬴政建立秦朝,完成统一大业。文献记载,秦始皇在东巡之前,曾在统一全国次年进行过一次西巡,所到区域为秦的北地郡(今平凉庆阳地区)与陇西郡(今天水陇南定西地区),人生哪有那么多值得,只要你觉得值得就是心安!人生总是充满未知,而且每个人都有不同的标准来衡量值得什么,它取决于个人所经历的经验和价值观。有一句话可以概括你有一种自己认为是能够让自己充分满足的东西,那就是你认为值得的。每个人都淋巴癌患者需要注意什么淋巴癌患者应该注意什么?肿瘤专家说淋巴癌是淋巴系统疾病法中最为严重的一种,疾病的发生给患者的带来了很大的困挠,所以积极的配合医生的治疗,以免给身体带来更大的危害,在治疗的同时还要做铁人经封闭论45铁人群视频集铁人经,与易筋经欢喜经语录经,并称地球武林宇宙世界四大真经,深奥玄妙,意境幽远,艰深晦涩,非DNA纯净者思想纯净者作风纯净者身子纯净者(简称四个纯净)不可读懂悟深吃透修单板滑雪有多快?堪比动车!!!都说单板滑雪的速度快,究竟能快到什么程度?到目前为止,最快纪录是203公里小时!没错,就是203公里小时!速度之快,堪比动车哪!在这里,小编啰嗦一小句,单板滑雪的速度,和滑雪者的自
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网