国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1)

這篇具有很好參考價值的文章主要介紹了SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq

文章目錄
  • 前言
  • 1、前置條件
  • 2、搭建service-search模塊
  • 3、開發(fā)功能接口
    • 3.1 添加遠程調(diào)用方法
      • 3.2、創(chuàng)建遠程調(diào)用模塊
      • 3.3、開發(fā)service-search 模塊接口
  • 4、RabbitMQ
  • 5、完善SKU管理商品上下架
    • 5.1、商品服務(wù)
      • 5.2、es服務(wù)
  • 6、最終測試
  • 總結(jié)

前言

最終實現(xiàn)效果:針對SKU的上下架

上架效果:

1、后臺選擇SKU,點擊上架,該SKU修改為上架狀態(tài)
2、同時向MQ發(fā)送消息
3、服務(wù)監(jiān)聽收到消息后向Es中新增該SKU基本信息

下架效果:

1、后臺選擇SKU,點擊下架,該SKU修改為下架狀態(tài)
2、同時向MQ發(fā)送消息
3、服務(wù)監(jiān)聽收到消息后向Es中刪除該SKU基本信息

那為什么一個上架的功能要使用這么多知識點呢,最簡單的方式不就是修改SKU的狀態(tài),然后用戶端只顯示已上架的SKU就可以么。

原因有兩點:

1.提高效率
2.還是效率

我們知道,在用戶端搜索SKU信息,最簡單的方式就是通過sku關(guān)鍵詞直接模糊查詢數(shù)據(jù)庫中的sku信息,但是每次查詢數(shù)據(jù)庫都會發(fā)生IO的碰撞,顯然不是最優(yōu)的解決方法,而ElasticSearch就是為了檢索而生,所以我們上架后自動將SKU數(shù)據(jù)存放到ElasticSearch中,然后用戶端直接檢索es中的數(shù)據(jù)即可,這樣檢索速度就哐哐哐的提上去了。

那為什么還要用到消息隊列MQ呢,這是因為RabbitMQ是異步發(fā)送,當我們一個人操作sku可能沒什么,那如果我們的系統(tǒng)有100萬個商戶,并且這100萬個商戶同時操作上下架呢?那么想想就是很恐怖的,當然,真到了這個量級肯定還需要再次調(diào)優(yōu)。這個時候異步的重要的不言而喻。

主要使用技術(shù)點:

  • JDK(版本為:1.8)
  • SpringBoot(版本為:2.3.6.RELEASE)
  • SpringData(用來操作ES)
  • RabbitMQ(版本為:3.8)
  • ElaticSearch(版本為:7.8)
  • Spring Cloud(版本為:Hoxton.SR8)
  • Nacos(版本為:2.2.3)

1、前置條件

  1. Nacos的運行
  2. ElasticSearch的運行(我這里使用的是IK分詞器和Kibana工具)
  3. RabbitMQ的運行
  4. 項目使用的是SpringBoot

關(guān)于如何安裝和運行這些軟件大家可以去百度搜索下,很簡單的。


2、搭建service-search模塊

1、創(chuàng)建一個模塊專門用來操作ES,根據(jù)自己項目接口來放,我這里放在service業(yè)務(wù)模塊下
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq

2、引入ES依賴

<dependencies>
    <!-- ES依賴 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <!-- 引入遠程調(diào)用模塊 - 商品模塊 -->
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>service-product-client</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>

3、es模塊的配置文件

server:
  port: 8204

feign:
  sentinel:
    enabled: true
  client:
    config:
      default:   #配置全局的feign的調(diào)用超時時間 如果 有指定的服務(wù)配置 默認的配置不會生效
        connectTimeout: 30000 # 指定的是 消費者 連接服務(wù)提供者的連接超時時間 是否能連接 單位是毫秒
        readTimeout: 50000  # 指定的是調(diào)用服務(wù)提供者的 服務(wù) 的超時時間() 單位是毫秒
spring:
  main:
    allow-bean-definition-overriding: true #當遇到同樣名字的時候,是否允許覆蓋注冊
  elasticsearch:   # ElaticSearch
    rest:
      uris: http://localhost:9200
  rabbitmq:
    host: 192.168.64.109
    port: 5672
    username: guest
    password: guest
    publisher-confirm-type: CORRELATED
    publisher-returns: true
    listener:
      simple:
        prefetch: 1
        concurrency: 3
        acknowledge-mode: manual
  redis:
    host: localhost
    port: 6379
    database: 0
    timeout: 1800000
    password:
    lettuce:
      pool:
        max-active: 20 #最大連接數(shù)
        max-wait: -1    #最大阻塞等待時間(負數(shù)表示沒限制)
        max-idle: 5    #最大空閑
        min-idle: 0     #最小空閑


4、記得在ES啟動類上加上服務(wù)注冊和遠程調(diào)用注解
這里需要引入兩個依賴,一個是nacos服務(wù)注冊,一個是服務(wù)調(diào)用openfeign,因為這兩個依賴我是放在了es模塊的父工程中,所以es模塊我是不需要引入的,大家根據(jù)自己項目結(jié)構(gòu)來即可

@EnableDiscoveryClient      //服務(wù)注冊
@EnableFeignClients         //服務(wù)調(diào)用

3、開發(fā)功能接口

3.1 添加遠程調(diào)用方法

說明:因為我這里的設(shè)計是在商品上架的時候,向MQ發(fā)送的是SKU主鍵ID,并不是該sku的所有基本信息,所以我需要額外寫接口來根據(jù)sku主鍵id查詢基本信息,這里大家根據(jù)自身情況來寫即可。

找到我們的商品模塊,先創(chuàng)建一個api包,然后將提供給遠程調(diào)用的接口放在api包下


/**
 * 遠程調(diào)用API(生產(chǎn)者)
 * @author Eric
 * @date 2023-06-29 10:00
 */
@RestController
@RequestMapping("/api/product")
public class ProductInnnerController {

    @Autowired
    private CategoryService categoryService;
    @Autowired
    private SkuInfoService skuInfoService;


    @ApiOperation(value = "根據(jù)分類id獲取分類信息")
    @GetMapping("/inner/getCategory/{categoryId}")
    public Category getCategory(@PathVariable Long categoryId) {
        return categoryService.getById(categoryId);
    }

    @ApiOperation(value = "根據(jù)skuId獲取sku信息")
    @GetMapping("/ inner/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable("skuId") Long skuId) {
        return skuInfoService.getById(skuId);
    }

}

3.2、創(chuàng)建遠程調(diào)用模塊

1、創(chuàng)建service-client模塊(我這里的設(shè)定是所有遠程調(diào)用的服務(wù)都放在該模塊中,但該模塊并不負責調(diào)用,而是由各自對應(yīng)的子模塊服務(wù)來進行調(diào)用)
2、service-client模塊下再創(chuàng)建子模塊 service-product-client定義接口
我的結(jié)構(gòu)如下:
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq
3、service-client模塊引入依賴:(主要還是openfeign的依賴)

<dependencies>
    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>common-util</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>com.atguigu</groupId>
        <artifactId>model</artifactId>
        <version>1.0-SNAPSHOT</version>
        <scope>provided</scope>
    </dependency>

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

    <!-- 服務(wù)調(diào)用feign -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
        <scope>provided</scope>
    </dependency>
</dependencies>

4、ProductFeignClient添加定義方法

/**
 * 遠程調(diào)用其他模塊中的api
 * @author Eric
 * @date 2023-06-29 10:04
 */
@FeignClient(value = "service-product") //指定調(diào)用模塊
public interface ProductFeignClient {

    //根據(jù)分類id獲取分類信息
    @GetMapping("/api/product/inner/getCategory/{categoryId}")
    public Category getCategory(@PathVariable("categoryId") Long categoryId);

    //根據(jù)skuId獲取sku信息
    @GetMapping("/api/product/inner/getSkuInfo/{skuId}")
    public SkuInfo getSkuInfo(@PathVariable("skuId") Long skuId);

}

3.3、開發(fā)service-search 模塊接口

1、controller


import com.atguigu.ssyx.common.result.Result;
import com.atguigu.ssyx.search.service.SkuService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * 商品搜索列表接口
 *
 * @author Eric
 * @date 2023-06-29 10:15
 */
@RestController
@RequestMapping("api/search/sku")
public class SkuApiController {

    @Autowired
    private SkuService skuService;

    @ApiOperation(value = "上架商品")
    @GetMapping("inner/upperSku/{skuId}")
    public Result upperGoods(@PathVariable("skuId") Long skuId) {
        skuService.upperSku(skuId);
        return Result.ok();
    }

    @ApiOperation(value = "下架商品")
    @GetMapping("inner/lowerSku/{skuId}")
    public Result lowerGoods(@PathVariable("skuId") Long skuId) {
        skuService.lowerSku(skuId);
        return Result.ok();
    }
}

2、service接口


/**
 * @author Eric
 * @date 2023-06-29 10:16
 */
public interface SkuService {
    /**
     * 上架商品列表
     * @param skuId
     */
    void upperSku(Long skuId);

    /**
     * 下架商品列表
     * @param skuId
     */
    void lowerSku(Long skuId);
}


3、impl

import com.alibaba.fastjson.JSON;
import com.atguigu.ssyx.enums.SkuType;
import com.atguigu.ssyx.model.product.Category;
import com.atguigu.ssyx.model.product.SkuInfo;
import com.atguigu.ssyx.model.search.SkuEs;
import com.atguigu.ssyx.product.client.ProductFeignClient;
import com.atguigu.ssyx.search.repository.SkuRepository;
import com.atguigu.ssyx.search.service.SkuService;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author Eric
 * @date 2023-06-29 10:16
 */

@Slf4j
@Service
public class SkuServiceImpl implements SkuService {

    @Autowired
    private ProductFeignClient productFeignClient;

    @Autowired
    private SkuRepository skuEsRepository;

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    /**
     * 上架商品列表
     *
     * @param skuId
     */
    @Override
    public void upperSku(Long skuId) {
        log.info("upperSku:" + skuId);
        SkuEs skuEs = new SkuEs();

        //查詢sku信息
        SkuInfo skuInfo = productFeignClient.getSkuInfo(skuId);
        if (null == skuInfo) return;

        // 查詢分類
        Category category = productFeignClient.getCategory(skuInfo.getCategoryId());
        if (category != null) {
            skuEs.setCategoryId(category.getId());
            skuEs.setCategoryName(category.getName());
        }
        skuEs.setId(skuInfo.getId());
        skuEs.setKeyword(skuInfo.getSkuName() + "," + skuEs.getCategoryName());
        skuEs.setWareId(skuInfo.getWareId());
        skuEs.setIsNewPerson(skuInfo.getIsNewPerson());
        skuEs.setImgUrl(skuInfo.getImgUrl());
        skuEs.setTitle(skuInfo.getSkuName());
        if (skuInfo.getSkuType() == SkuType.COMMON.getCode()) {
            skuEs.setSkuType(0);
            skuEs.setPrice(skuInfo.getPrice().doubleValue());
            skuEs.setStock(skuInfo.getStock());
            skuEs.setSale(skuInfo.getSale());
            skuEs.setPerLimit(skuInfo.getPerLimit());
        } else {
            //TODO 待完善-秒殺商品

        }
        SkuEs save = skuEsRepository.save(skuEs);//往Es中新增數(shù)據(jù)
        log.info("upperSku:" + JSON.toJSONString(save));
    }

    /**
     * 下架商品列表
     *
     * @param skuId
     */
    @Override
    public void lowerSku(Long skuId) {
        this.skuEsRepository.deleteById(skuId);//刪除Es中的數(shù)據(jù)
    }
}


4、創(chuàng)建SkuRepository(用來操作Es,這里使用的是SpringData技術(shù))

/**
 * @author Eric
 * @date 2023-06-29 10:19
 */
// 參數(shù)一:泛型  參數(shù)二:類型,是由泛型中的主鍵類型而決定的
public interface SkuRepository extends ElasticsearchRepository<SkuEs, Long> { 
}

4、RabbitMQ

1、創(chuàng)建mq模塊
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq

因為mq的作用類似于工具類,并且多處需要使用,所以我這里選擇放在common模塊下

2、引入MQ依賴

<dependencies>
    <!--rabbitmq消息隊列-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bus-amqp</artifactId>
    </dependency>
</dependencies>

3、添加service方法


import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author Eric
 * @date 2023-06-30 22:57
 */

@Service
public class RabbitService {

    //  引入操作rabbitmq 的模板
    @Autowired
    private RabbitTemplate rabbitTemplate;

    /**
     * 發(fā)送消息
     *
     * @param exchange   交換機
     * @param routingKey 路由鍵(路由key)
     * @param message    消息
     * @return
     */
    public boolean sendMessage(String exchange, String routingKey, Object message) {
        //  調(diào)用發(fā)送數(shù)據(jù)的方法
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
        return true;
    }

    /**
     * 發(fā)送延遲消息的方法
     *
     * @param exchange   交換機
     * @param routingKey 路由鍵
     * @param message    消息內(nèi)容
     * @param delayTime  延遲時間
     * @return
     */
    public boolean sendDelayMessage(String exchange, String routingKey, Object message, int delayTime) {

        //  在發(fā)送消息的時候設(shè)置延遲時間
        rabbitTemplate.convertAndSend(exchange, routingKey, message, new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                //  設(shè)置一個延遲時間
                message.getMessageProperties().setDelay(delayTime * 1000);
                return message;
            }
        });
        return true;
    }
}


4、配置mq消息轉(zhuǎn)換器

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * mq消息轉(zhuǎn)換器(默認是字符串轉(zhuǎn)換器)
 */

@Configuration
public class MQConfig {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}


5、添加消息的確認配置(我這里配置的是手動確認模式)

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class MQProducerAckConfig implements RabbitTemplate.ReturnCallback,RabbitTemplate.ConfirmCallback {

    //  我們發(fā)送消息使用的是 private RabbitTemplate rabbitTemplate; 對象
    //  如果不做設(shè)置的話 當前的rabbitTemplate 與當前的配置類沒有任何關(guān)系!
    @Autowired
    private RabbitTemplate rabbitTemplate;

    //  設(shè)置 表示修飾一個非靜態(tài)的void方法,在服務(wù)器加載Servlet的時候運行。并且只執(zhí)行一次!
    @PostConstruct
    public void init(){
        rabbitTemplate.setReturnCallback(this);
        rabbitTemplate.setConfirmCallback(this);
    }

    /**
     * 表示消息是否正確發(fā)送到了交換機上
     * @param correlationData   消息的載體
     * @param ack   判斷是否發(fā)送到交換機上
     * @param cause 原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean ack, String cause) {
        if(ack){
            System.out.println("消息發(fā)送成功!");
        }else {
            System.out.println("消息發(fā)送失??!"+cause);
        }
    }

    /**
     * 消息如果沒有正確發(fā)送到隊列中,則會走這個方法!如果消息被正常處理,則這個方法不會走!
     * @param message
     * @param replyCode
     * @param replyText
     * @param exchange
     * @param routingKey
     */
    @Override
    public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
        System.out.println("消息主體: " + new String(message.getBody()));
        System.out.println("應(yīng)答碼: " + replyCode);
        System.out.println("描述:" + replyText);
        System.out.println("消息使用的交換器 exchange : " + exchange);
        System.out.println("消息使用的路由鍵 routing : " + routingKey);
    }
}

6、RabbitMQ常量類

/**


**自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。**

**深知大多數(shù)大數(shù)據(jù)工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!**

**因此收集整理了一份《2024年大數(shù)據(jù)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友。**
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq

**既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上大數(shù)據(jù)開發(fā)知識點,真正體系化!**

**由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新**

**如果你覺得這些內(nèi)容對你有幫助,可以添加VX:vip204888 (備注大數(shù)據(jù)獲?。?*
SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1),2024年程序員學習,java-rabbitmq,spring boot,rabbitmq

量類



/**

自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。

深知大多數(shù)大數(shù)據(jù)工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!

因此收集整理了一份《2024年大數(shù)據(jù)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友。
[外鏈圖片轉(zhuǎn)存中…(img-J2uRuOZu-1712862333773)]
[外鏈圖片轉(zhuǎn)存中…(img-H15zZfNh-1712862333774)]
[外鏈圖片轉(zhuǎn)存中…(img-UmW61keA-1712862333774)]
[外鏈圖片轉(zhuǎn)存中…(img-QJXCyMLO-1712862333774)]
[外鏈圖片轉(zhuǎn)存中…(img-iKPM94eN-1712862333774)]

既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上大數(shù)據(jù)開發(fā)知識點,真正體系化!

由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新

如果你覺得這些內(nèi)容對你有幫助,可以添加VX:vip204888 (備注大數(shù)據(jù)獲?。?/strong>
[外鏈圖片轉(zhuǎn)存中…(img-eBFCxzdx-1712862333775)]文章來源地址http://www.zghlxwxcb.cn/news/detail-854205.html

到了這里,關(guān)于SpringBoot實戰(zhàn)項目整合RabbitMQ+ElaticSearch實現(xiàn)SKU上下架功能_尚上優(yōu)選整合es+mq實現(xiàn)商品上下架(1)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SpringBoot項目整合RabbitMQ

    消息隊列(Message Queue)是分布式系統(tǒng)中常用的組件,它允許不同的應(yīng)用程序之間通過發(fā)送和接收消息進行通信。Spring Boot提供了簡單且強大的方式來整合消息隊列,其中包括RabbitMQ、ActiveMQ、Kafka等多種消息隊列實現(xiàn)。 本文將以RabbitMQ為例,詳細介紹如何使用Spring Boot來整合消

    2024年02月09日
    瀏覽(30)
  • RabbitMq整合Springboot超全實戰(zhàn)案例+圖文演示+源碼自取

    RabbitMq整合Springboot超全實戰(zhàn)案例+圖文演示+源碼自取

    目錄 介紹 簡單整合 簡單模式 定義 代碼示例 ?work模式 定義 代碼示例 pubsub模式 定義 代碼示例 routing模式? 定義 代碼示例 ?top模式 定義 代碼 下單付款加積分示例 介紹 代碼 ?可靠性投遞示例 介紹 代碼 交換機投遞確認回調(diào)? 隊列投遞確認回調(diào)? ?延遲消息場景示例 介紹 代

    2024年02月03日
    瀏覽(21)
  • SpringBoot項目整合Redis,Rabbitmq發(fā)送、消費、存儲郵件

    SpringBoot項目整合Redis,Rabbitmq發(fā)送、消費、存儲郵件

    本文主要是【Rabbitmq】——SpringBoot項目整合Redis,Rabbitmq發(fā)送、消費、存儲郵件的文章,如果有什么需要改進的地方還請大佬指出?? ??作者簡介:大家好,我是聽風與他?? ??博客首頁:CSDN主頁聽風與他 ??每日一句:狠狠沉淀,頂峰相見 測試結(jié)果:此時指定郵箱已收到驗

    2024年02月04日
    瀏覽(18)
  • SpringBoot整合實現(xiàn)RabbitMQ

    SpringBoot整合實現(xiàn)RabbitMQ

    本文大綱 一.RabbitMQ介紹 二.RabbitMQ的工作原理 2.1 RabbitMQ的基本結(jié)構(gòu) 2.2 組成部分說明 2.3 生產(chǎn)者發(fā)送消息流程 2.4 消費者接收消息流程 三.SpringBoot 整合實現(xiàn)RabbitMQ 3.1創(chuàng)建mq-rabbitmq-producer(生產(chǎn)者)發(fā)送消息 3.1.1pom.xml中添加相關(guān)的依賴 3.1.2 配置application.yml 3.1.3 配置RabbitMQ常量類

    2024年02月17日
    瀏覽(50)
  • Shiro整合SpringBoot項目實戰(zhàn)

    Shiro整合SpringBoot項目實戰(zhàn)

    ?作者簡介:2022年 博客新星 第八 。熱愛國學的Java后端開發(fā)者,修心和技術(shù)同步精進。 ??個人主頁:Java Fans的博客 ??個人信條:不遷怒,不貳過。小知識,大智慧。 ??當前專欄:SpringBoot 框架從入門到精通 ?特色專欄:國學周更-心性養(yǎng)成之路 ??本文內(nèi)容:Shiro整合Sp

    2023年04月09日
    瀏覽(25)
  • springboot整合rabbitmq 實現(xiàn)消息發(fā)送和消費

    Spring Boot提供了RabbitMQ的自動化配置,使得整合RabbitMQ變得非常容易。 首先,需要在pom.xml文件中引入amqp-client和spring-boot-starter-amqp依賴: 接下來需要在application.properties文件中配置RabbitMQ連接信息: 然后編寫消息發(fā)送者: 其中,my-exchange和my-routing-key是需要自己定義的交換機和

    2024年02月07日
    瀏覽(20)
  • SpringBoot 整合ChatGPT API項目實戰(zhàn)

    SpringBoot 整合ChatGPT API項目實戰(zhàn)

    直接可以使用js+html開發(fā)一個對話,具體的源碼如下: 注意:需要替換自己的api-key,修改這一行代碼: xhr.setRequestHeader(“Authorization”, “Bearer API-KEY”)。

    2024年02月05日
    瀏覽(24)
  • SpringBoot 整合 ChatGPT API 項目實戰(zhàn)

    SpringBoot 整合 ChatGPT API 項目實戰(zhàn)

    SpringBoot 整合 ChatGPT API 項目實戰(zhàn) 一、準備工作 二、補全接口示例 三、申請API-KEY 四、JavaScript調(diào)用API 五、SpringBoot使用ChatGPT API 體驗到了ChatGPT的強大之后,那么我們會想,如果我們想基于ChatGPT開發(fā)一個自己的聊天機器人,這個能搞定嗎? ChatGPT平臺已經(jīng)為技術(shù)提供了一個入口

    2023年04月20日
    瀏覽(17)
  • 搭建RabbitMQ消息服務(wù),整合SpringBoot實現(xiàn)收發(fā)消息

    搭建RabbitMQ消息服務(wù),整合SpringBoot實現(xiàn)收發(fā)消息

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經(jīng)驗,專注JAVA技術(shù)、系統(tǒng)定制、遠程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN博客專家,藍橋云課認證講師。 消息隊列是一種在應(yīng)用程序之間傳遞數(shù)據(jù)的通信機制 ,它基于 發(fā)布-訂閱 模式,將消息發(fā)送者(發(fā)布者)和消息接收者

    2024年02月09日
    瀏覽(19)
  • 消息隊列-RabbitMQ:延遲隊列、rabbitmq 插件方式實現(xiàn)延遲隊列、整合SpringBoot

    消息隊列-RabbitMQ:延遲隊列、rabbitmq 插件方式實現(xiàn)延遲隊列、整合SpringBoot

    1、延遲隊列概念 延時隊列內(nèi)部是有序的 , 最重要的特性 就體現(xiàn)在它的 延時屬性 上,延時隊列中的元素是希望在指定時間到了以后或之前取出和處理,簡單來說, 延時隊列就是用來存放需要在指定時間被處理的元素的隊列。 延遲隊列使用場景: 訂單在十分鐘之內(nèi)未支付則

    2024年02月22日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包