当前位置: 首页 > news >正文

《springcloud alibaba》 一 Openfeign

准备

创建三个项目
在这里插入图片描述

父项目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <modules>
        <module>order</module>
        <module>stock</module>
    </modules>

    <groupId>com.cxy.springcloud</groupId>
    <artifactId>springcloudalibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloudalibaba</name>
    <description>springcloud alibaba</description>
    <packaging>pom</packaging>


    <properties>
        <java.version>1.8</java.version>
        <springboot.version>2.3.11.RELEASE</springboot.version>
        <springcloud.version>Hoxton.SR8</springcloud.version>
        <sprigncloud.alibaba.version>2.2.5.RELEASE</sprigncloud.alibaba.version>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- springboot版本依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${springboot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- springcloud版本依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR8</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- springcloudalibaba版本依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${sprigncloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

  • 有可能项目报错,可以忽略,只要启动不报错就行

order项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>com.cxy.springcloud</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>order</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--Nacos做配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

        <!--添加openfeign依赖-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

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

</project>

  • 注意,只是引入openfeign的包还不够,会包一个错误,需要引入loadbalancer的包

yml

server:
  port: 8015

spring:
  application:
    name: order-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        name: nacos
        password: nacos
        namespace: public

    loadbalancer:
      ribbon:
        enabled: false


####设置springboot级别
logging:
  level:
    com.cxy.order.feign.StockFeignService: debug
feign:
  client:
    config:
      stock-servic: ###对应微服务
        ###链接超时时间  默认2s
        connectTimeout: 5000
        ### 请求处理超时时间 默认5s
        readTimeout: 10000
  • 8848是nacos配置端口
  • logging.level是查看openFeign日志显示的
  • connectTimeout 是openFeign的超时时长
  • 注意,openFeign,谁是消费端,就在哪里配置

controller

package com.cxy.order.controller;

import com.cxy.order.feign.StockFeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.io.File;
import java.util.List;

/**
 * @author wu
 * @version 1.0
 * @date 2024/2/2 11:39
 */
@RestController
@RequestMapping("/order")
public class OrderController {

    @Autowired
    StockFeignService stockFeignService;
    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功");
        String msg = stockFeignService.reduct();
        return "Hello Feign!"+msg;
    }
}

启动类

package com.cxy.order;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @author wu
 * @version 1.0
 * @date 2024/2/2 11:47
 */
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class,args);
    }

}

  • EnableFeignClients 开启OpenFeign需要的注解

OpenFeign日志

package com.cxy.order.config;

import feign.Logger;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 全局配置
 * @author wu
 * @version 1.0
 * @date 2024/2/22 10:27
 */
@Configuration
public class FeignConfig {

    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }
}

  • 有几个级别,显示openFeign日志的

feign接口

package com.cxy.order.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author wu
 * @version 1.0
 * @date 2024/2/21 17:54
 */
@FeignClient(name = "stock-service",path = "/stock")
public interface  StockFeignService {
    @RequestMapping("/reduct")
    String reduct();

}

stock项目

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloudalibaba</artifactId>
        <groupId>com.cxy.springcloud</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>stock</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!--Nacos做配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
</project>

yml配置

server:
  port: 8011


spring:
  application:
    name: stock-service
  cloud:
    nacos:
      server-addr: 127.0.0.1:8848
      discovery:
        name: nacos
        password: nacos
        namespace: public
  • 可以启动多个stock,模拟负载均衡,我这里是启动两个,8011和8012

controller

package com.cxy.stock.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author wu
 * @version 1.0
 * @date 2024/2/2 11:39
 */
@RestController
@RequestMapping("/stock")
public class StockController {
   @Value("${server.port}")
   private Integer port;

   @RequestMapping("/reduct")
   public String reduct(){
       System.out.println("扣减库存!");
       return "扣减库存"+port;
   }

}

在这里插入图片描述
输入http://localhost:8015/order/add,说明启动成功
在这里插入图片描述

  • 前提,已启动nacos端
    在这里插入图片描述

相关文章:

  • 2024年刷题记录
  • 【51单片机】直流电机驱动(PWM)(江科大)
  • 备战蓝桥杯—— 双指针技巧巧答链表1
  • vue3组件通信方式汇总
  • 【高德地图】Android高德地图初始化定位并显示小蓝点
  • C语言概述
  • Docker Image(镜像)
  • 用html编写的招聘简历
  • 后端设计PNR一点总结
  • 数据挖掘-Weka的安装与使用
  • bat脚本 创建计划任务 一分钟设置ntp同步周期为60s
  • @ControllerAdvice 统一管理异常/错误
  • jvm垃圾收集器-三色标记算法
  • 【elasticsearch实战】知识库文件系统检索工具FSCrawler
  • leetcode hot100组合综合四
  • neo4j常用代码
  • nginx 日志改为json格式
  • 【前端工程化面试题】webpack proxy的工作原理,为什么能解决跨域问题
  • Mac远程连接Windows 11
  • 【软件架构】02-复杂度来源
  • 央行召开落实金融“五篇大文章”总体统计制度动员部署会议
  • 王毅:携手做世界和平与发展事业的中流砥柱
  • 暗蓝评《性别打结》丨拆解性别之结需要几步?
  • 王毅会见泰国外长玛里:坚决有力打击电诈等跨境犯罪
  • 深圳一季度GDP为8950.49亿元,同比增长5.2%
  • 影子调查丨危房之下,百余住户搬离梦嘉商贸楼