2.03 引入分布式组件

1. 引入Nacos
  • 本地下载nacos,下载地址:https://github.com/alibaba/nacos/releases

    下载到windows之后,直接运行bin目录下的startup.cmd即可使用

    image-20230523203641022

  • 给每个项目导入nacos依赖

    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  • 在每个项目的yml文件中添加nacos配置

    spring:
      application:
        name: mail-product
      datasource:
        username: root
        password: root
        url: jdbc:mysql://192.168..:3306/gulimall_pms?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC
        driver-class-name: com.mysql.cj.jdbc.Driver
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
    
  • 并且添加bootstrap.yml文件

    spring:
      application:
        name: mail-product
    
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848
            namespace: 0844f69e-612c-43f8-a469-2057cec21778
    
  • 在启动类加上@EnableDiscoveryClient注解

    image-20230523204028942

  • 检查是否使用成功

    访问http://localhost:8848/nacos/#/login

    服务列表中如果存在项目名称,则成功

    image-20230523204333168

其他项目也像这样配置

2. 引入openfeign远程调用

我理解的远程调用:让一个服务可以调用另一个服务的实现方法,下面有演示

  • 在使用openfeign远程调用之前一定要确保服务已经注册到nacos中

  • 引入openfeign依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
    
  • 演示:

    mail-auth-server服务的LoginController中调用mail-memberlogin方法

    • mail-auth-serve让服务下的LoginController

      	/**
           * 远程调用登录功能
           * @param vo
           * @param attributes
           * @param session
           * @return
           */
          @PostMapping(value = "/login")
          public String login(UserLoginVo vo, RedirectAttributes attributes, HttpSession session) {
      
              //远程登录
              R login = memberFeignService.login(vo);
      
              if (login.getCode() == 0) {
                  MemberResponseVo data = login.getData("data", new TypeReference<MemberResponseVo>() {});
                  session.setAttribute(LOGIN_USER,data);
                  return "redirect:http://mymail.com";
              } else {
                  Map<String,String> errors = new HashMap<>();
                  errors.put("msg",login.getData("msg",new TypeReference<String>(){}));
                  attributes.addFlashAttribute("errors",errors);
                  return "redirect:http://auth.mymail.com/login.html";
              }
          }
      
    • mail-auth-server服务下的MemberFeignService

      @FeignClient("mail-member")
      public interface MemberFeignService {
          @PostMapping(value = "/member/member/login")
          R login(@RequestBody UserLoginVo vo);
      }
      
    • mail-member服务下的MemberController中,具体实现省略

      	/**
           * 登录功能
           * @param vo
           * @return
           */
          @PostMapping(value = "/login")
          public R login(@RequestBody MemberUserLoginVo vo) {
      //        System.out.println(1);
      
              MemberEntity memberEntity = memberService.login(vo);
      
              if (memberEntity != null) {
                  return R.ok().setData(memberEntity);
              } else {
                  return R.error(BizCodeEnum.LOGINACCT_PASSWORD_EXCEPTION.getCode(),BizCodeEnum.LOGINACCT_PASSWORD_EXCEPTION.getMessage());
              }
          }
      

      以上通过使用openfeign,在mail-auth-server服务中可以使用到mail-member服务中的方法

3. 引入网关
  • 创建mail-gateway模块,并将其加入到nacos中

    image-20230523210102895
  • 在pom文件中引入gateway依赖

        <dependencies>
            <dependency>
                <groupId>com.xmh.gulimall</groupId>
                <artifactId>gulimall-common</artifactId>
                <version>1.0.0-SNAPSHOT</version>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
        </dependencies>
    
  • 测试:访问http://localhost:88?url=baidu 切换到百度

    配置mail-gateway服务的yml文件,像里面写入

    server:
      port: 88
    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
        gateway:
          routes:
            - id: baidu_route              # 每一个路由的名字,唯一即可
              uri: https://www.baidu.com   # 匹配后提供服务的路由地址
              predicates:                 # 断言规则
                - Query=url,baidu         #如果url参数等于baidu 符合断言,转到uri
      application:
        name: mail-gateway
        
    

    访问http://localhost:88?url=baidu,会转到百度

image-20230523210819603

gateway使用成功,其他使用可参考博客:https://blog.csdn.net/a745233700/article/details/122917167

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值