栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微服务笔记大全1

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微服务笔记大全1

文章目录
    • 第一部分:了解聚合工程
        • 1.代表的业务
        • 2.微服务的含义
        • 3.注意的点
    • 第二部分Nocas注册平台
        • 1.Nocas的含义
        • 2.Nocas在不同系统的启动方式
        • 3.配置Nocas的步骤
        • 4.配置Nocas的注册中心步骤
        • 5.配置Nocas的调用步骤
        • 6.修改消费端默认的负载均衡策略
        • 7.Netflix默认提供了负载均衡策略(只记了几个常用的)
        • 8.配置负载均衡的远程调用:【Ribbon】
        • 9.Feign应用实践配置:【在负载均衡配置基础上】
        • 注意的点

第一部分:了解聚合工程 1.代表的业务
  SpringBoot:   监控
  Spring:       定义各种业务bean
  mybatis:      持久化业务
2.微服务的含义
  微服务项目一般都会采用聚合工程结构,可通过聚合工程结构实现共享资源的复用,简化项目的管理方式。
  布局如下:
  例如:
 GitCGB2105IVProjects (工作区/空项目)
 ├── 01-sca                     //微服务父工程
 ├── sca-provider            //服务提供方法
 ├── sca-consumer         //服务消费方法
 ├── sca-gateway            //网关服务

【先建一个maven的父级工作区,其中父级的src可以删除,pom可以复制老师的,也可以自己打】
【父工程的作用:将子工程的共性代码提取出来,打包的默认方式是pom】
【父工程的下所有子工程,都会默认以module元素的方式添加到父工程中】
【如若删除:首先进行file—>Project Structure—>Modules—>减号;然后project下找到目标右击delete; 最后删除父工程pom
中modules的数据】

3.注意的点
  1. springboot的@test导的包是:org.junit.jupiter.api
  2. …/startup.sh -m standalone 其中standalone代表着单机模式运行,非集群模式
  3. throwable 用于接收异常
  4. 把对象交给spring:不整合第三方时,可以用@Component; @Bean //非配置类用此方式导入【整合第三方】
    例子如下:
 @Bean
        public DefaultCache defaultCache(){
                  return new DefaultCache();
               }
@import    //配置类用此方式导入
  1. 一旦有@Component、 @Service:服务层、 @Controller:控制层、@Repository:持久层时,就要使用@Autowired:依赖注入.
第二部分Nocas注册平台 1.Nocas的含义

Nacos是一种应用于服务注册与发现、配置管理的平台【nacos说明白点就是注册中心和配置中心】

2.Nocas在不同系统的启动方式

startup.cmd -m standalone:windows方式启动nacos服务
【其中standalone是非集群方式运行,也叫单机访问】

./startup.sh -m standalone:Linux方式启动nacos服务
【其中standalone是非集群方式运行,也叫单机访问】

3.配置Nocas的步骤

(1)官网下载Nacos的压缩包
(2)然后解压Nacos的压缩包【别放在中文的目录下】
(3)登录mysql,并导入nacos-mysql.sql脚本

source d:/nacos-mysql.sql 

(4)然后修改nacos中conf中的application.properties配置【改 Config Module Related Configurations下面的#删除】

### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

(5)配置完成后,启动nacos的服务
(6)访问Nacos的服务即可【默认的密码和账号为nacos】

4.配置Nocas的注册中心步骤

(1)先定义服务的POM文件


        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        
    

(2)再定义application.yml文件【其中服务的名字之间只能用横线连接】

server:
   port: 8081
spring:
  application:
    name: sca-provider #进行服务注册必须配置服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

(3)再创建服务启动类
(4)最后启动Nacos服务

5.配置Nocas的调用步骤

(1)首先提供服务方的控制层创建对象

package com.jt.provider.controller;

@RestController
public class ProviderController{
    //@Value默认读取项目配置文件中配置的内容
    //8080为没有读到server.port的值时,给定的默认值
    @Value("${server.port:8080}")
    private String server;
    //http://localhost:8081/provider/echo/tedu
    @GetMapping("/provider/echo/{msg}")
    public String doRestEcho1(@PathVariable String msg){
        return server+" say hello "+msg;
    }
}

(2)再创建消费方,并继承最外面的maven,并修改pom文件


        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        
    

(3)再添加并修改application.yml文件

server:
  port: 8090
spring:
  application:
    name: sca-consumer #服务注册时,服务名必须配置
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #从哪里去查找服务

(4)创建消费方的启动类实现服务消费
(5)然后在消费方的启动类创建RestTemplate对象【RestTemplate:调用远程服务的】

@Bean
public RestTemplate restTemplate(){//基于此对象实现远端服务调用
    return new RestTemplate();
}

(6)然后定义消费方的控制层,并在此方法中实现远程的调用

@RestController
public class ConsumerController {
    
    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/consumer/doRestEcho1")
    public String doRestEcho01(){
        //1.定义要调用的远端服务的url
        String url="http://localhost:8081/provider/echo/8090";
        //2.基于restTemplate对象中的相关方法进行服务调用
        return restTemplate.getForObject(url, String.class);
    }
}

(7)最后启动消费者服务和提供者服务,以及Nacos服务【缺一不可】

6.修改消费端默认的负载均衡策略

方法一:

#客户端负载均衡
sca-provider: #要访问的服务名  
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡算法

方法二:

定义一个IRule类在消费方的启动类中
@Bean
public IRule ribbonRule() {
    return new RandomRule();
}
7.Netflix默认提供了负载均衡策略(只记了几个常用的)

(1)RoundRobinRule:轮训策略【默认】
(2)RandomRule:随机策略
(3)RetryRule:重试策略
(4)ZoneAvoidanceRule:加权策略

8.配置负载均衡的远程调用:【Ribbon】

(1)首先提供服务方的控制层创建对象
(2)再创建消费方,并继承最外面的maven,并修改pom文件


        org.springframework.boot
        spring-boot-starter-web
    
    
        com.alibaba.cloud
        spring-cloud-starter-alibaba-nacos-discovery
    
    
        org.springframework.cloud
        spring-cloud-starter-netflix-ribbon
    

(3)再添加并修改application.yml文件

server:
  port: 8090
spring:
  application:
    name: sca-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
#客户端负载均衡
sca-provider: #要访问的服务名
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡算法

(4)创建消费方的启动类实现服务消费
(5)然后在消费方的启动类创建RestTemplate对象
(6)然后通过@LoadBalanced定义一个RestTemplate对象交给Spring管理

【/LoadBalancerClient:微服务端的负载均衡的客户端对象/】

(7)然后注入创建好的对象,并创建个方法
(8)最后启用即可

【最后两步,例子如下:
        public String doReEch03(){
        String serverName="sca-provider";
        String url=String.format("http://%s/provider/echo/{msg}", serverName);
        return loadBalancedRestTemplate.getForObject(url, String.class,appName);
    }
】
9.Feign应用实践配置:【在负载均衡配置基础上】

(1)在服务消费方导入项目依赖


    org.springframework.cloud
    >spring-cloud-starter-openfeign

(2)在消费方的启动类加注解@EnableFeignClients------【该注解是用来启用Feign客户端】

@EnableFeignClients
@SpringBootApplication
public class ConsumerApplication {…}

(3)然后在消费方用@FeignClient定义接口来IP地址访问远程服务-----【@FeignClient描述的接口底层会为其创建实现类】

package com.jt.consumer.service;
@FeignClient(name="sca-provider")//sca-provider为服务提供者名称
public interface RemoteProviderService{
    @GetMapping("/provider/echo/{string}")//前提是远端需要有这个服务
    public String echoMessage(@PathVariable("string") String string);
}

【在Feign接口中从路径获取参数时,@PathVairaible(“路径的参数”) 参数类型 参数】
(4)然后再定义相对应的collection层和YML文件

package com.jt.consumer.controller;
@RestController
@RequestMapping("/consumer/ ")
public class FeignConsumerController {
    @Autowired
    private RemoteProviderService remoteProviderService;
    
    @GetMapping("/echo/{msg}")
    public String doFeignEcho(@PathVariable  String msg){
        //基于feign方式进行远端服务调用(前提是服务必须存在)
        return remoteProviderService.echoMessage(msg);
    }
}

【YML文件的配置信息为feign.hystrix.enabled: true】#熔断机制,连接超时自动熔断
(5)最后启动消费者服务

注意的点
  1. idea中Http Client工具的应用(基于此工具进行restful风格的请求测试)
    (1)Tools----->Http Client------>Test RESTful Web Service
    (2)输入请求类型 要访问的地址【每个请求完了都以###分隔】
  2. RPC:跨进程服务
  3. Nacos是springboot的程序
  4. idea中链接数据库的URL中后面加的serverTimezone=Asia/Shanghai&characterEncoding=utf8
  5. String类的format()方法用于创建格式化的字符串以及连接多个字符串对象【%s:占位符】
  6. Feign接口指向的对象是代理对象
  7. @EnableFeignClients注解的作用:描述配置类
  8. @FeignClients注解的作用:在启动类启动时,描述的接口创建实现类-代理类
  9. 常用服务发现、服务调用方式有:RestTemplate、Ribbon、feign
    (1)sca-consumer------>RestTemplate直接获取实例------>sca-provider
    (2)先通过LoadBalancerClient进行服务查找,然后通过ServiceInstance获取服务实例,最后通过RestTemplate调用
    (3)@LoadBalanced+RestTemplate
    (4)@EnableFeignClients+@FeignClient
  10. Ribbon:是负载均衡客户端,一般应用于服务的消费方法
    Ribbon:可以解决基于负载均衡策略进行服务调用的问题
    @LoadBalanced的作用是:描述RestTemplate对象,让系统底层为RestTemplate对象赋能,对象请求过程进行拦截
  11. idea中Http Client工具的应用(基于此工具进行restful风格的请求测试)
    (1)Tools----->Http Client------>Test RESTful Web Service
    (2)输入请求类型 要访问的地址【每个请求完了都以###分隔】
  12. 【主要YML配置:超时连接:
feign:
  client:
    config:
      default: #表示所有的服务均采用此配置。也可以指定具体的服务名
        connectTimeOut: 10000 #连接超时
        readTimeout: 10000   #读取数据超时】

【注意:配置了熔断机制就不能配置连接超时和读取数据超时;两者只能存在一个】
13. 不同的报错信息:
客户端报500,证明后端服务器报错
客户端报404,证明路径错误,访问不到
客户端报405,证明请求参数不匹配
客户端报400,证明参数类型不对
客户端报502,证明连接超时
客户端报403,证明权限不存在
客户端报503,证明服务不可用
客户端报401,证明没有认证不够

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/630872.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号