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

谷粒商城-訂單服務(wù)

這篇具有很好參考價值的文章主要介紹了谷粒商城-訂單服務(wù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

商城業(yè)務(wù)-訂單服務(wù)-RabbitMQ延時隊列

商城業(yè)務(wù)-訂單服務(wù)-延時隊列定時關(guān)單模擬

商城業(yè)務(wù)-訂單服務(wù)-創(chuàng)建業(yè)務(wù)交換機&隊列

商城業(yè)務(wù)-訂單服務(wù)-監(jiān)聽庫存解鎖

商城業(yè)務(wù)-訂單服務(wù)-庫存解鎖邏輯

商城業(yè)務(wù)-訂單服務(wù)-庫存自動解鎖完成

商城業(yè)務(wù)-訂單服務(wù)-測試庫存自動解鎖

商城業(yè)務(wù)-訂單服務(wù)-定時關(guān)單完成

商城業(yè)務(wù)-訂單服務(wù)-消息丟失、積壓、重復(fù)等解決方案


商城業(yè)務(wù)-訂單服務(wù)-RabbitMQ延時隊列

使用消息隊列的目的是:保證數(shù)據(jù)的最終一致性

谷粒商城-訂單服務(wù)

采用定時任務(wù)的方式:每隔一段時間進(jìn)行全表的掃描,會消耗系統(tǒng)內(nèi)存和增加數(shù)據(jù)庫的壓力,最致命的是存在較大的時間誤差

假如:10:00定時任務(wù)開始執(zhí)行,則10:01有用戶下訂單但未支付,10:30的時候定時任務(wù)再次執(zhí)行,這個訂單還差1分鐘才能進(jìn)行關(guān)單操作,因此,下一次掃描到它要等到11:00,存在著29分鐘的誤差時間。

谷粒商城-訂單服務(wù)

采用消息隊列可以完美的解決定時任務(wù)所帶來的缺陷?

假如:10:00下訂單,再下訂單之前先給消息隊列發(fā)送一條下單消息,等30分鐘自動發(fā)送關(guān)閉訂單消息,監(jiān)聽服務(wù)收到消息,去查看此訂單是否完成支付,若未完成支付則關(guān)閉訂單。誤差也就一兩分鐘。對于解鎖庫存也是同理。

谷粒商城-訂單服務(wù)

設(shè)置消息的過期時間: 在過期時間內(nèi)都沒有被消費則此消息將會被丟棄并稱之為死信

設(shè)置隊列的過期時間:在此過期時間內(nèi)都沒有隊列被客戶端連接則隊列里的所有消息都被成為死信

谷粒商城-訂單服務(wù)

死信路由: 消息過期未被消費的,則消息會被交給一個指定的路由器,這個路由器由于只接收死信所以被成為死信路由

谷粒商城-訂單服務(wù)

RabbitMQ實現(xiàn)延時隊列的原理:通過設(shè)置隊列的過期時間使消息都變成死信,此隊列是不能被任何服務(wù)監(jiān)聽的,當(dāng)消息過期時,通過死信路由將死信路由給指定隊列,指定隊列只接收死信也就是延時消息,服務(wù)器專門監(jiān)聽指定隊列從而達(dá)到定時任務(wù)的效果。

實現(xiàn)1:給隊列設(shè)置過期時間,推薦使用

谷粒商城-訂單服務(wù)

實現(xiàn)方式2:給消息設(shè)置過期時間,不推薦使用

不推薦使用的原因是:RabbitMQ采用的是懶檢查,假如第一個消息設(shè)置的是5分鐘過期,第二個消息設(shè)置的是2分鐘過期,第三個消息設(shè)置的是30s過期,RabbitMQ過來一看消息5分鐘后才過期,那么5分鐘之后才會來將消息路由并不會關(guān)注后面消息的過期時間。

商城業(yè)務(wù)-訂單服務(wù)-延時隊列定時關(guān)單模擬

按照下圖邏輯,模擬下單成功1分鐘后,收到關(guān)閉訂單的消息

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)

編寫隊列、交換機,綁定關(guān)系?

容器中的 Binding、Queue、Exchange 都會自動創(chuàng)建(RabbitMQ沒有的情況)

RabbitMQ只要有,@Bean聲明的屬性發(fā)生變化也不會覆蓋

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class MyMQConfig {

    @Bean
    public Queue orderDelayQueue(){
        Map<String,Object> arguments = new HashMap<>();
        arguments.put("x-dead-letter-exchange","order-event-exchange");
        arguments.put("x-dead-letter-routing-key","order.release.order");
        arguments.put("x-message-ttl",60000);
        // String name, boolean durable, boolean exclusive, boolean autoDelete,
        //			@Nullable Map<String, Object> arguments
        Queue queue = new Queue("order.delay.queue", true, false, false, arguments);
        return queue;
    }


    @Bean
    public Queue orderReleaseOrderQueue(){
        Queue queue = new Queue("order.release.order.queue", true, false, false);
        return queue;
    }

    @Bean
    public Exchange orderEventExchange(){
        // String name, boolean durable, boolean autoDelete, Map<String, Object> arguments
        TopicExchange exchange = new TopicExchange("order-event-exchange", true, false);
        return exchange;
    }

    @Bean
    public Binding orderCreateOrderBinding(){
        // String destination, DestinationType destinationType, String exchange, String routingKey,
        //			@Nullable Map<String, Object> arguments
        return new Binding("order.delay.queue",
                Binding.DestinationType.QUEUE, "order-event-exchange",
                "order.create.order",
                null);
    }

    @Bean
    public Binding orderReleaseOrderBinding(){
        return new Binding("order.release.order.queue",
                Binding.DestinationType.QUEUE, "order-event-exchange",
                "order.release.order",
                null);
    }
}

監(jiān)聽關(guān)單事件

谷粒商城-訂單服務(wù)

模擬訂單完成?

谷粒商城-訂單服務(wù)

商城業(yè)務(wù)-訂單服務(wù)-創(chuàng)建業(yè)務(wù)交換機&隊列

解鎖庫存的實現(xiàn):

①庫存服務(wù)導(dǎo)入RabbitMQ的依賴

  <!--  RabbitMQ的依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

② RabbitMQ的配置

spring:
  rabbitmq:
    host: 192.168.56.22
    virtual-host: /

?配置RabbitMQ的序列化機制

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

@Configuration
public class MyRabbitMQConfig {
    
    @Bean
    public AbstractMessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

④ 開啟RabbitMQ

谷粒商城-訂單服務(wù)

⑤ 按照下圖創(chuàng)建交換機、隊列、綁定關(guān)系

谷粒商城-訂單服務(wù)

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.converter.AbstractMessageConverter;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class MyRabbitMQConfig {

    @RabbitListener(queues = "stock.release.stock.queue")
    public void handle(Message message){

    }


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


    @Bean
    public Exchange stockEventExchange(){
        // String name, boolean durable, boolean autoDelete, Map<String, Object> arguments
        return new TopicExchange("stock-event-exchange",true,false);
    }

    @Bean
    public Queue stockReleaseStockQueue(){
        // String name, boolean durable, boolean exclusive, boolean autoDelete,@Nullable Map<String, Object> arguments
        return new Queue("stock.release.stock.queue",true,false,false,null);
    }

    @Bean
    public Queue stockDelayQueue(){
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-dead-letter-exchange","stock-event-exchange");
        arguments.put("x-dead-letter-routing-key","stock.release");
        arguments.put("x-message-ttl",120000);
        // String name, boolean durable, boolean exclusive, boolean autoDelete,@Nullable Map<String, Object> arguments
        return new Queue("stock.delay.queue",true,false,false,arguments);
    }

    @Bean
    public Binding stockReleaseBinding(){
        // String destination, DestinationType destinationType, String exchange, String routingKey,@Nullable Map<String, Object> arguments
        return new Binding("stock.release.stock.queue",
                Binding.DestinationType.QUEUE,"stock-event-exchange","stock.release.#",null);
    }

    @Bean
    public Binding stockLockedBinding(){
        return new Binding("stock.delay.queue",Binding.DestinationType.QUEUE,
                "stock-event-exchange","stock.locked",null);
    }
}

出現(xiàn)問題:?并沒創(chuàng)建交換機、隊列、綁定關(guān)系

出現(xiàn)問題的原因:只有當(dāng)?shù)谝淮芜B接上RabbitMQ時,發(fā)現(xiàn)沒有這些東西才會創(chuàng)建

解決方案:監(jiān)聽隊列

谷粒商城-訂單服務(wù)

交換機、隊列、綁定關(guān)系創(chuàng)建成功后,將上述代碼注釋

谷粒商城-訂單服務(wù)

商城業(yè)務(wù)-訂單服務(wù)-監(jiān)聽庫存解鎖

庫存解鎖的兩種場景:

①下單成功,訂單過期沒有支付被系統(tǒng)自動取消、被用戶手動取消。都要解鎖

②下單成功,庫存鎖定成功,接下來的業(yè)務(wù)調(diào)用失敗,導(dǎo)致訂單回滾。之前鎖定的庫存就要自動解鎖

?加上全參和無參構(gòu)造器注解

谷粒商城-訂單服務(wù)

② 保存工作單詳情方便回溯

谷粒商城-訂單服務(wù)③ Common服務(wù)中創(chuàng)建To,方便MQ發(fā)送消息

谷粒商城-訂單服務(wù)

如果To僅僅保存這個兩個數(shù)據(jù)的話,會存在一些問題, 當(dāng)1號訂單在1號倉庫扣減1件商品成功,2號訂單在2號倉庫扣減2件商品成功,3號訂單在3號倉庫扣減3件商品失敗時,庫存工作單的數(shù)據(jù)將會回滾,此時,數(shù)據(jù)庫中將查不到1號和2號訂單的庫存工作單的數(shù)據(jù),但是庫存扣減是成功的,導(dǎo)致無法解鎖庫存

解決方案: 保存庫存工作詳情To

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)④ 向MQ發(fā)送庫存鎖定成功的消息

谷粒商城-訂單服務(wù)?

谷粒商城-訂單服務(wù)

商城業(yè)務(wù)-訂單服務(wù)-庫存解鎖邏輯&庫存自動解鎖完成&測試庫存自動解鎖

解鎖場景:

1.下單成功,庫存鎖定成功,接下來的業(yè)務(wù)調(diào)用失敗導(dǎo)致訂單回滾。之前鎖定的庫存就要自動解鎖。

2.鎖庫存失敗無需解鎖

解決方案:通過查詢訂單的鎖庫存信息,如果有則僅僅說明庫存鎖定成功,還需判斷是否有訂單信息,如果有訂單信息則判斷訂單狀態(tài),若訂單狀態(tài)已取消則解鎖庫存,反之:不能解鎖庫存,如果沒有訂單信息則需要解鎖庫存,如果沒有鎖庫存信息則無需任何操作。

1.編寫Vo,通過拷貝訂單實體,用于接收訂單信息

谷粒商城-訂單服務(wù)

2. 遠(yuǎn)程服務(wù)編寫,獲取訂單狀態(tài)

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)?3.監(jiān)聽事件

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)

 /**
     * 解鎖庫存服務(wù)
     * @param stockLockedTo
     */
    @Override
    public void unlockStock(StockLockedTo stockLockedTo){
        StockDetailTo detail = stockLockedTo.getDetail();
        Long detailId = detail.getId();
        // 查詢庫存工作單的信息 有:解鎖庫存 沒有:庫存鎖定失敗,數(shù)據(jù)自定義回滾無需解鎖
        WareOrderTaskDetailEntity detailEntity = wareOrderTaskDetailService.getById(detailId);
        if (null!=detailEntity){
            // 有,解鎖庫存
            Long id = stockLockedTo.getId(); // 庫存工作單的id
            WareOrderTaskEntity wareOrderTaskEntity = wareOrderTaskService.getById(id);
            String orderSn = wareOrderTaskEntity.getOrderSn();
            // 遠(yuǎn)程服務(wù)調(diào)用,獲取訂單狀態(tài)信息
            // 先判斷訂單是否存在
            R r = orderFeignService.getOrderStatus(orderSn);
            if (r.getCode().equals(0)){
                OrderVo orderVo = r.getData(new TypeReference<OrderVo>() {});
                if (null==orderVo || orderVo.getStatus().equals(4)){
                    // 訂單不存在或者訂單被關(guān)閉,都需要去解鎖庫存
                    // 當(dāng)且僅當(dāng) 鎖定狀態(tài)為 已鎖定 時 才去解鎖
                    if (detailEntity.getLockStatus().equals(1)){
                        releaseStock(detailEntity.getSkuId(),detailEntity.getWareId(),detail.getSkuNum(),detailEntity.getId());
                    }
                }
            }else {
                // 遠(yuǎn)程服務(wù)調(diào)用失敗,拋出異常 將消息放回消息隊列中
                throw new RuntimeException("遠(yuǎn)程調(diào)用訂單服務(wù)失?。。?!");
            }
        }else {
            // 訂單的庫存詳情信息不存在,無需解鎖
        }
    }

    private void releaseStock(Long skuId, Long wareId, Integer skuNum,Long taskDetailId) {
        // 解鎖庫存
        wareSkuDao.unLockStock(skuId,wareId,skuNum);
        // 更新庫存工作單狀態(tài)
        WareOrderTaskDetailEntity wareOrderTaskDetailEntity = new WareOrderTaskDetailEntity();
        wareOrderTaskDetailEntity.setId(taskDetailId);
        wareOrderTaskDetailEntity.setLockStatus(2);
        wareOrderTaskDetailService.updateById(wareOrderTaskDetailEntity);
    }

4. 遠(yuǎn)程服務(wù)調(diào)用可能會出現(xiàn)失敗,需要設(shè)置手動ACK,確保其它服務(wù)能消費此消息

#手動ACK設(shè)置
spring.rabbitmq.listener.simple.acknowledge-mode=manual

谷粒商城-訂單服務(wù)

出現(xiàn)問題: 遠(yuǎn)程調(diào)用訂單服務(wù)時被攔截器攔截

解決方案:請求路徑適配放行

谷粒商城-訂單服務(wù)

商城業(yè)務(wù)-訂單服務(wù)-定時關(guān)單完成

1.定時關(guān)單代碼編寫

①訂單創(chuàng)建成功,給MQ發(fā)送關(guān)單消息

谷粒商城-訂單服務(wù)② 監(jiān)聽事件,進(jìn)行關(guān)單

谷粒商城-訂單服務(wù)

谷粒商城-訂單服務(wù)谷粒商城-訂單服務(wù)??

訂單釋放和庫存解鎖邏輯: 當(dāng)訂單創(chuàng)建成功之后,向MQ發(fā)送關(guān)單消息,過期時間為1分鐘,向MQ發(fā)送解鎖庫存消息,過期時間為2分鐘,關(guān)單操作完成之后,過了1分鐘解鎖庫存操作。

存在問題:由于機器卡頓、消息延遲等導(dǎo)致關(guān)單消息未延遲發(fā)送,解鎖庫存消息正常發(fā)送和監(jiān)聽,導(dǎo)致解鎖庫存消息被消費,當(dāng)執(zhí)行完關(guān)單操作后便無法再執(zhí)行解鎖庫存操作,導(dǎo)致卡頓的訂單永遠(yuǎn)無法解鎖庫存。

解決方案:采取主動補償?shù)牟呗浴.?dāng)關(guān)單操作正常完成之后,主動去發(fā)送解鎖庫存消息給MQ,監(jiān)聽解鎖庫存消息進(jìn)行解鎖。

谷粒商城-訂單服務(wù)

③ 按上圖創(chuàng)建綁定關(guān)系

谷粒商城-訂單服務(wù)④ common服務(wù)中,創(chuàng)建CreateTo(拷貝order實體)?

谷粒商城-訂單服務(wù)

⑤ 向MQ發(fā)送解鎖庫存消息

谷粒商城-訂單服務(wù)

⑥ 解鎖庫存操作

谷粒商城-訂單服務(wù)谷粒商城-訂單服務(wù)

商城業(yè)務(wù)-訂單服務(wù)-消息丟失、積壓、重復(fù)等解決方案

谷粒商城-訂單服務(wù)

情況一: 消息發(fā)送出去但是由于網(wǎng)絡(luò)原因未到達(dá)服務(wù)器,解決方案:采用try-catch將發(fā)送失敗的消息持久化到數(shù)據(jù)庫中,采用定期掃描重發(fā)的方式。

drop table if exists mq_message;
CREATE TABLE `mq_message` (
	`message_id` CHAR(32) NOT NULL,
	`content` TEXT,
	`to_exchange` VARCHAR(255) DEFAULT NULL,
	`routing_key` VARCHAR(255) DEFAULT NULL,
	`class_type` VARCHAR(255) DEFAULT NULL,
	`message_status` INT(1) DEFAULT '0' COMMENT '0-新建  1-已發(fā)送  2-錯誤抵達(dá)  3-已抵達(dá)',
	`create_time` DATETIME DEFAULT NULL,
	`update_time` DATETIME DEFAULT NULL,
	PRIMARY KEY (`message_id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4

情況二:消息抵達(dá)服務(wù)器的隊列中才算完成消息的持久化,解決方案publish的ack機制

谷粒商城-訂單服務(wù)情況三: 防止自動ack帶來的缺陷,采用手動ack,解決方案上面都有這里不再細(xì)說

谷粒商城-訂單服務(wù)

消息被成功消費,ack時宕機,消息由unack變成ready,Broker又重新發(fā)送。解決方案:將消費者的業(yè)務(wù)消費接口應(yīng)該設(shè)計為冪等性的,比如扣庫存有工作單的狀態(tài)標(biāo)志。

谷粒商城-訂單服務(wù)

消息積壓即消費者的消費能力不夠, 上線更多的消費者進(jìn)行正常的消費。文章來源地址http://www.zghlxwxcb.cn/news/detail-403066.html

到了這里,關(guān)于谷粒商城-訂單服務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 2023最新谷粒商城筆記之支付服務(wù)篇(全文總共13萬字,超詳細(xì))

    2023最新谷粒商城筆記之支付服務(wù)篇(全文總共13萬字,超詳細(xì))

    這里我們是使用的支付寶進(jìn)行支付,所以需要調(diào)用支付寶的相關(guān)API,下面來了解一下怎樣使用支付寶進(jìn)行線上支付。 支付寶開放平臺傳送門: 支付寶開放平臺 網(wǎng)站支付DEMO傳送門: 手機網(wǎng)站支付 DEMO | 網(wǎng)頁移動應(yīng)用 RSA、加密加簽、密鑰等 對稱加密 對稱加密 :發(fā)送方和接收

    2024年02月09日
    瀏覽(90)
  • 【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊-生成訂單服務(wù)-鎖定庫存

    【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊-生成訂單服務(wù)-鎖定庫存

    一個是需要生成訂單信息一個是需要生成訂單項信息。具體的核心代碼為 鎖定庫存的操作,需要操作ware倉儲服務(wù)。 沒有庫存或者鎖定庫存失敗我們通過自定義的異常拋出 如果下訂單操作成功(訂單數(shù)據(jù)和訂單項數(shù)據(jù))我們就會操作鎖庫存的行為 鎖定庫存失敗通過拋異常來

    2024年02月09日
    瀏覽(27)
  • 谷粒商城P139集——云服務(wù)器frp內(nèi)網(wǎng)穿透+nginx

    谷粒商城P139集——云服務(wù)器frp內(nèi)網(wǎng)穿透+nginx

    我注冊的域名是第一年14元的 (1)購買域名并備案 (2)域名解析 測試:如域名為gulimall.com 則在瀏覽器中輸入 gulimall.com:9200 (前提是9200端口已經(jīng)開放) (1)下載 wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_amd64.tar.gz 云服務(wù)器下載linux版本注意frps的配置即可

    2024年02月09日
    瀏覽(95)
  • 谷粒商城第六天-商品服務(wù)之分類管理下的獲取三級分類樹形列表

    谷粒商城第六天-商品服務(wù)之分類管理下的獲取三級分類樹形列表

    目錄 一、總述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 在網(wǎng)頁中建好目錄及菜單 2.1.1 建好商品目錄 2.1.2 建好分類管理菜單 ?編輯 2.2 編寫組件 2.2.1?先完成組件文件的創(chuàng)建 2.2.2 編寫組件 2.2.2.1 顯示三級分類樹形列表 三、后端部分 3.1 編寫商品分類的相關(guān)接口 3.1.1 獲取樹

    2024年02月15日
    瀏覽(83)
  • 谷粒商城第七天-商品服務(wù)之分類管理下的刪除、新增以及修改商品分類

    谷粒商城第七天-商品服務(wù)之分類管理下的刪除、新增以及修改商品分類

    目錄 一、總述 1.1 前端思路 1.2 后端思路 二、前端部分 2.1 刪除功能 2.2 新增功能 2.3 修改功能 三、后端部分 3.1 刪除接口 3.2 新增接口 3.3 修改接口 四、總結(jié) ?刪除和新增以及修改的前端無非就是點擊按鈕,就向后端發(fā)送請求,交與后端真正的執(zhí)行相關(guān)操作。 具體來說,就是

    2024年02月15日
    瀏覽(95)
  • 谷粒商城篇章5 ---- P173-P192 ---- 檢索服務(wù)【分布式高級篇二】

    谷粒商城篇章5 ---- P173-P192 ---- 檢索服務(wù)【分布式高級篇二】

    目錄 1 檢索服務(wù)? 1.1 搭建頁面環(huán)境 1.1.1 引入依賴 1.1.2 將檢索頁面放到gulimall-search的src/main/resources/templates/目錄下 1.1.3 調(diào)整搜索頁面 1.1.4?將靜態(tài)資源放到linux的nginx相關(guān)映射目錄下/root/docker/nginx/html/static/ search/ 1.1.5?SwitchHosts配置域名轉(zhuǎn)發(fā) 1.1.6?測試 1.1.7?nginx配置 1.1.8 網(wǎng)關(guān)配

    2024年02月15日
    瀏覽(93)
  • 谷粒商城第七天-商品服務(wù)之分類管理下的分類的拖拽功能的實現(xiàn)

    谷粒商城第七天-商品服務(wù)之分類管理下的分類的拖拽功能的實現(xiàn)

    目錄 一、總述 1.1 前端思路 1.2 后端思路 二、前端實現(xiàn) 2.1 判斷是否能進(jìn)行拖拽 2.2 收集受影響的節(jié)點,提交給服務(wù)器 三、后端實現(xiàn) 四、總結(jié) 這個拖拽功能對于這種樹形的列表,整體的搬遷是很方便的。但是其實現(xiàn)卻并不是那么的簡單。 花樣主要體現(xiàn)在前端上面,前端有兩

    2024年02月14日
    瀏覽(638)
  • 【業(yè)務(wù)功能篇104】 補充【業(yè)務(wù)功能篇99】微服務(wù)-springcloud-springboot-電商訂單模塊--整合支付

    在前面我們業(yè)務(wù)功能篇98-99中,我們介紹了電商項目中的訂單模塊服務(wù),那么最后就是需要進(jìn)行支付動作,那么我們這里就通過訂閱第三方平臺支付寶的支付調(diào)用接口功能,來進(jìn)一步完成訂單提交后的支付動作,支付寶的接口使用可以登錄官網(wǎng)開發(fā)指南詳情去了解 在我們對應(yīng)

    2024年02月09日
    瀏覽(33)
  • 谷粒商城第三天-微服務(wù)中基本組件的使用
java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.cho

    谷粒商城第三天-微服務(wù)中基本組件的使用 java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.cho

    目錄 一、前言 二、學(xué)習(xí)的內(nèi)容 一、Nacos的服務(wù)注冊/發(fā)現(xiàn) 1. 導(dǎo)依賴,nacos-discovery java.lang.AbstractMethodError: org.springframework.cloud.netflix.ribbon.RibbonLoadBalancerClient.cho 2. 在application.yml中聲明nacos服務(wù)器的ip地址和端口號,以及指定好服務(wù)的名稱 3. 在啟動類上面加上@EnableDiscoverClient 二、

    2024年02月09日
    瀏覽(229)
  • 【筆記】谷粒商城高級篇

    【筆記】谷粒商城高級篇

    全文檢索工具:快速儲存、搜索和分析海量數(shù)據(jù)。 Index (索引) → Mysql的庫 動詞,相當(dāng)于MySQL中的insert; 名詞,相當(dāng)于MySQL中的Database。 Type (類型) → Mysql的表(過時) 在Index中,可以定義一個或多個類型。類似于MySQL中的Table;每一種類型的數(shù)據(jù)放在一起。 Document (文檔) →

    2023年04月21日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包