我們已經完成了對mq的基本學習和認識。接下來,我們就改造專案,實現搜尋服務、商品靜態頁的資料同步。
傳送方:商品微服務
接收方:搜尋微服務、靜態頁微服務靜態頁微服務:
在ly-common
中編寫乙個常量類,記錄將來會用到的exchange名稱、queue名稱、routing_key名稱
package com.leyou.common.constants;這些常量我們用乙個圖來展示用在什麼地方:/**
* @author 黑馬程式設計師
*/public abstract class mqconstants
public static final class routingkey
public static final class queue
}
我們先在商品微服務ly-item
中實現傳送訊息。
org.springframework.bootgroupid>
spring-boot-starter-amqpartifactid>
dependency>
spring:exchange:預設的交換機名稱,此處配置後,傳送訊息如果不指定交換機就會使用這個rabbitmq:
host: 127.0.0.1
username: leyou
password: leyou
virtual-host: /leyou
publisher-confirms: true
template:
retry:
enabled: true
initial-interval: 10000ms
max-interval: 80000ms
multiplier: 2
publisher-confirms:生產者確認機制,確保訊息會正確傳送,如果傳送失敗會有錯誤回執,從而觸發重試
需要注意的是,預設情況下,amqp會使用jdk的序列化方式進行處理,傳輸資料比較大,效率太低。我們可以自定義訊息轉換器,使用json來處理:
package com.leyou.item.config;改造goodsservice中的商品上下架功能,傳送訊息,注意用靜態匯入方式,匯入在ly-common中定義的常量:import org.springframework.amqp.support.converter.jackson2jsonmessageconverter;
import org.springframework.context.annotation.bean;
import org.springframework.context.annotation.configuration;
/**
* 配置json訊息轉換
*/@configuration
public class rabbitconfig }
注意:此刻不能啟動專案測試,因為rabbitmq中還沒有交換機和佇列。
搜尋服務接收到訊息後要做的事情:
我們需要兩個不同佇列,監聽不同型別訊息。
org.springframework.bootgroupid>
spring-boot-starter-amqpartifactid>
dependency>
spring:不過,不要忘了訊息轉換器(如果生產者沒有加訊息轉換器,那麼消費者也不要加):rabbitmq:
host: 127.0.0.1
username: leyou
password: leyou
virtual-host: /leyou
/*** @author 黑馬程式設計師
*/@configuration
public class rabbitconfig
}
**:
package com.leyou.search.mq;import com.leyou.common.constants.mqconstants;
import com.leyou.search.service.searchservice;
import lombok.extern.slf4j.slf4j;
import org.springframework.amqp.core.exchangetypes;
import org.springframework.amqp.rabbit.annotation.exchange;
import org.springframework.amqp.rabbit.annotation.queue;
import org.springframework.amqp.rabbit.annotation.queuebinding;
import org.springframework.amqp.rabbit.annotation.rabbitlistener;
import org.springframework.beans.factory.annotation.autowired;
import org.springframework.stereotype.component;
/**
* 商品上下架監聽
*/@component
@slf4j
public class itemlistener catch (exception e) }
/*** 商品下架->刪除索引庫
* 注意:消費者接受的內容和生產者傳送的內容要一致
*/@rabbitlistener(bindings = @queuebinding(
value = @queue(name = mqconstants.queue.search_item_down),
exchange = @exchange(name = mqconstants.exchange.item_exchange_name,type = exchangetypes.topic),
key = mqconstants.routingkey.item_down_key
))public void deleteindex(long spuid)
rabbitmq簡單使用
安裝rabbitmq,進入sbin執行rabbitmq service start 傳送者 package com.zhy.rabbit.01 import com.rabbitmq.client.channel import com.rabbitmq.client.connection impor...
RabbitMQ使用記錄
公司業務比較複雜,各部門使用的技術也不一樣,往往在業務互動處理處是乙個頭疼問題,為了方便使用,於是搭建了這個mq。至於為什麼使用這個mq,這裡不做解說,我們在支付訂單業務上通過mq保證各系統連貫正常,這裡收集了相關資料,方便大家使用。安裝 訪問控制 網路 配置 集群 命令 前台執行 rabbitmq...
RabbitMQ入門 使用
測試環境 thinkphp5.0 use phpamqplib connection amqpstreamconnection usephpamqplib message amqpmessage 3 在控制器或者配置檔案中定義相關引數 public static amqp array name ad...