RabbitMQ使用例子

2022-06-23 04:15:14 字數 3288 閱讀 3777

我們已經完成了對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:

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

exchange:預設的交換機名稱,此處配置後,傳送訊息如果不指定交換機就會使用這個

publisher-confirms:生產者確認機制,確保訊息會正確傳送,如果傳送失敗會有錯誤回執,從而觸發重試

需要注意的是,預設情況下,amqp會使用jdk的序列化方式進行處理,傳輸資料比較大,效率太低。我們可以自定義訊息轉換器,使用json來處理:

package com.leyou.item.config;

​import org.springframework.amqp.support.converter.jackson2jsonmessageconverter;

import org.springframework.context.annotation.bean;

import org.springframework.context.annotation.configuration;

​/**

* 配置json訊息轉換

*/@configuration

public class rabbitconfig ​}

​​

改造goodsservice中的商品上下架功能,傳送訊息,注意用靜態匯入方式,匯入在ly-common中定義的常量:

注意:此刻不能啟動專案測試,因為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...