微服务笔记大全1

第一部分:了解聚合工程

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文件

<dependencies>
        <!--Web服务-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--服务的注册和发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

(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;
/**定义Controller对象(这个对象在spring mvc中给他的定义是handler),
 1. 基于此对象处理客户端的请求*/
@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文件

<dependencies>
        <!--Web服务-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--服务的注册和发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
    </dependencies>

(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 {
    /**
     * 从spring容器获取一个RestTemplate对象,
     * 基于此对象实现远端服务调用
     */
    @Autowired
    private RestTemplate restTemplate;
    /**
     * 在此方法中通过一个RestTemplate对象调用远端sca-provider中的服务
     * @return
     * 访问此方法的url: http://localhost:8090/consumer/doRestEcho1
     */
    @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文件

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>

(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)在服务消费方导入项目依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

(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;
    /**基于feign方式的服务调用*/
    @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,证明没有认证不够

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值