从零开始搭建一个微服务项目(一)
创始人
2024-01-29 00:50:50
0

文章目录

    • Nacos搭建
      • 一. 安装nacos
      • 二.创建项目导入依赖
      • 三. 进行配置
      • 四.引入Feign远程调用
      • 五.引入RIbbon负载均衡
      • 六.Nacos配置中心

Nacos搭建

一. 安装nacos

我安装的是window版,可参照该教程nacos安装教程

二.创建项目导入依赖

  1. 首先我们先创建一个主工程。
    引入如下依赖(因为spring-clound不同版本需要的springboot版本不同,所以下面会将版本号带上)
    springboot版本使用的是2.2.5.RELEASE
com.alibaba.cloudspring-cloud-alibaba-dependencies2.2.1.RELEASEpomimportorg.springframework.cloudspring-cloud-dependenciesHoxton.SR6pomimport
  1. 再主工程下创建一个common公共子工程,创建一个空的maven项目,引入如下依赖
org.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-testtestorg.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatorcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.bootspring-boot-testorg.apache.httpcomponentshttpclient4.5.3com.fasterxml.jackson.corejackson-core2.11.1com.fasterxml.jackson.corejackson-annotations2.11.1com.alibaba.cloudspring-cloud-starter-alibaba-nacos-configorg.springframework.cloudspring-cloud-starter-openfeign2.1.3.RELEASE
  1. 主工程下创建对应的生产者消费者的springboot工程,并引入自建Common依赖
    目录结构如下
    在这里插入图片描述

三. 进行配置

对应的服务,需要注册在Nacos注册中心里。所以在application中进行配置。
在生产者和消费者中都加入该配置

#nacos配置 采用分级存储模型,将同一个机房中的实例化为一个集群
spring:cloud:nacos:server-addr: xxx.xx.xx.xxx:8848discovery:cluster-name: SZapplication:name: publisher

并在消费者的启动类上添加 @EnableDiscoveryClient注解
至此配置就完成了。

四.引入Feign远程调用

各个服务之间是通过Http请求来进行交互,原先使用RestTemplate进行请求,可以使用更方便的openFeign(Feign已经停止维护,可以看此篇文章)

  1. 引入依赖放到common包下

  2. 进行配置 feign底层用的HttpUrlConnect进行发送请求,可以更换为Okhttp,效率更高

    feign:client:config:default:connectTimeout: 5000readTimeout: 5000loggerLevel: basicokhttp:enabled: truehystrix:enabled: true
    
  3. 开启Fegin 在springboot启动类上添加 @EnableFeignClients

  4. 发送请求。在消费者服务里建一个接口,写上需要调用的请求,并在接口上添加@FeignClient(name = "publisher" ,path="/order")
    name为请求服务的服务名,path为路径前缀

    @FeignClient(name = "publisher" ,path="/order")
    public interface OrderFegin {@RequestMapping("/test/all")Object allOrders();@RequestMapping("/test/getOrder/{id}")Object getOrder(@PathVariable("id") String id);
    }
    

    在colntroller中注入Feign接口,便可使用

    @RestController
    @RequestMapping("/order")
    public class OrderController {@Autowiredprivate OrderFegin orderFegin;@RequestMapping("/all")public Object getAllOrder(){HashMap map = new HashMap<>();map.put("order",orderFegin.allOrders());return map;}@RequestMapping("/all/{id}")public Object getAllOrder(@PathVariable("id") String id){HashMap map = new HashMap<>();map.put("order",orderFegin.getOrder(id));return map;}
    }
    

原理:通过指定的服务名,去注册中心查找对应的ip地址,然后去向目标发送请求

五.引入RIbbon负载均衡

  1. nacos默认引入了RIbbon
    默认使用ZoneAvoidanceRule(ribbon默认的轮序规则,分集群,但并不能实现根据同集群优先来实现负载均衡)
    可以自定义使用哪一个规则,推荐使用NacosRule,可以同集群优先

    	  @Beanpublic IRule iRule(){return new NacosRule();}
    

    如何配置属于哪个集群

    #nacos配置 采用分级存储模型,将同一个机房中的实例化为一个集群
    spring:cloud:nacos:server-addr: 172.30.61.51:8848discovery:cluster-name: SZ #集群配置
    
  2. RIbbon原理
    通过服务名在数据中心找到多个ip,然后通过负载均衡策略(可以通过实现Irlue来实现),来制定对应的实例ip。
    在这里插入图片描述

六.Nacos配置中心

  1. 服务启动时会先通过bootstrap拿到nacos地址,再去nacos去对应的配置。配置中心的配置大于本地的配置。

在这里插入图片描述
2. 如何通过bootstrap拿到nacos对应的配置呢,会通过服务名+profile名+后缀名组成。(nacos中没有profile名,则对该服务所有环境都生效)

spring:application:name: publisher # 服务名称profiles:active: dev #开发环境,这里是devcloud:nacos:server-addr: 172.30.61.51:8848 # Nacos地址config:file-extension: yaml # 文件后缀名extension-configs: #多个微服务公用的配置文件- data-id: common.yaml
  1. 如何实现配置的热更新呢?
    可以通过 @RefreshScope 或者 @ConfigurationProperties 来实现

  2. 还支持在nacos中设置优先级(1最大,0用不使用)
    在这里插入图片描述

参考大佬博客

相关内容

热门资讯

美媒:美国务院开始大规模裁员   新华社纽约7月11日电(记者夏林)据多家美国媒体报道,美国务院11日开始大规模裁员,首批将解雇1...
26家企业共获4.78亿元融资...   二、定增融资情况本周共26家挂牌公司完成定增融资,累计融资额4.78亿元。其中融资额超过3000...
三大股指震荡翻红创业板涨近0.... 三大股指震荡翻红创业板涨近0.3%民航机场、湖北板块领涨爱投顾股票原标题:三大股指震荡翻红创业板涨近...
创业板退市规则 创业板退市规则... 2019年报数据适用创业板退市规则?深交所:存量改革不搞一刀切新浪财经综合原标题:2019年报数据是...
深交所明确创业板退市制度改革过... 业板改革并试点注册制正在紧锣密鼓地推进中,针对退市流程较长、退市指标较单一等痛点,创业板退市新规通过...
创业板注册制会带来什么市场变化... 确定不再关注此人吗确定取消原标题:创业板注册制会带来什么市场变化罗果 组合与策略资深研究员2020年...
两个期货新品种获批 期货服务实... 两个期货新品种获批期货服务实体产业领域不断拓宽新浪财经综合两个期货新品种获批期货服务实体产业领域不断...
持续丰富期货市场服务产业模式 ... 持续丰富期货市场服务产业模式期货日报全面提升服务能力和效率服务实体经济是期货市场的初心所在,更是前进...
农村人创业好项目有哪些 这几个...     如今中国经济发展得越来越好,而农村经济也逐渐发展起来,对此很多人也愿意回到农村发展,有些朋友...
老站长推荐09年五个网赚项目 ...  短视频,自媒体,达人种草一站服务现在我就以赚钱项目为大家写一篇好软的软文,想赚钱第一件事必须要做的...