商品下架後將商品從索引庫中移除。
與商品上架的實現思路非常類似。
(1)在資料監控微服務中監控tb_spu表的資料,當tb_spu發生更改且is_marketable為0時,表示商品下架,將spu的id傳送到rabbitmq。
(2)在rabbitmq管理後台建立商品下架交換器(fanout)。使用分列模式的交換器是考慮商品下架會有很多種邏輯需要處理,索引庫刪除資料只是其中一項,另外還有刪除商品詳細頁等操作。
(3)搜尋微服務從rabbitmq的的佇列中提取spu的id,通過呼叫elasticsearch的高階restapi 將相關的sku列表從索引庫刪除。
4.3.1 建立交換器與佇列
完成商品下架交換器的建立,佇列的建立與繫結,將spuid傳送訊息到mq
商品下架交換器:goods_down_exchange
佇列名稱: search_delete_queue
繫結 search_delete_queue到goods_down_exchange
package com.changgou.search.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.qualifier;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
@configuration
public
class
rabbitmqconfig
@bean
(search_add_queue)
public queue search_add_queue()
@bean
(search_del_queue)
public queue search_del_queue()
//宣告交換機
@bean
(goods_up_exchange)
public exchange goods_up_exchange()
@bean
(goods_down_exchange)
public exchange goods_down_exchange()
//佇列與交換機的繫結
@bean
public binding goods_up_exchange_binding
(@qualifier
(search_add_queue)queue queue,
@qualifier
(goods_up_exchange)exchange exchange)
@bean
public binding goods_down_exchange_binding
(@qualifier
(search_del_queue)queue queue,
@qualifier
(goods_down_exchange)exchange exchange)
}
4.3.2 canal監聽下架
修改changgou_canal的spulistener的goodup方法,新增以下**
public
void
goodsup
(canalentry.eventtype eventtype,canalentry.rowdata rowdata)
//獲取最新下架的商品 1->0if(
"1".
equals
(olddata.
get(
"is_marketable"))
&&"0"
.equals
(newdata.
get(
"is_marketable"))
)}
4.3.3 根據spuid刪除索引資料
編寫業務邏輯,實現根據spuid刪除索引庫資料的方法。
(1)esmanagerservice新增方法定義
//根據spuid刪除ess索引庫中相關的sku資料
void
deldatabyspuid
(string spuid)
;
(2)esmanagerserviceimpl實現方法
@override
public
void
deldatabyspuid
(string spuid)
for(sku sku : skulist)
}
4.3.4 接收mq訊息,執行索引庫刪除
從rabbitmq中提取訊息,調動根據spuid刪除索引庫資料的方法 changgou_service_search新增監聽類
package com.changgou.search.listener;
import com.changgou.search.config.rabbitmqconfig;
import com.changgou.search.service.esmanagerservice;
import org.springframework.amqp.rabbit.annotation.rabbitlistener;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.component;
@component
public
class
goodsdellistener
}
mysql 刪除索引 簡書 MySQL刪除資料
mysql刪除資料 1.delete delete from table name a.delete屬於資料庫dml操作語言,只刪除資料不刪除表的結構,會走事務,執行時會觸發trigger b.在 innodb 中,delete其實並不會真的把資料刪除,mysql 實際上只是給刪除的資料打了個標記為...
刪除資料庫使用者
usr bin ksh 1 upload the shell command to the server 2 grant the 777 to the command 3 use method like as follow dropuser.sh username the username as t...
MySQL刪除資料庫
刪除資料庫是指在資料庫系統中刪除已經存在的資料庫。資料庫刪除之後,原來分配的空間將被收回。需要注意的是,資料庫刪除之後該資料庫中所有的表和資料都將被刪除。因此刪除資料庫要特別小心。一 通過sql語句 mysql中,刪除資料庫通過sql語句drop database。其語法格式如下 drop data...