柚子快報邀請碼778899分享:分布式 RabbitMQ基礎
柚子快報邀請碼778899分享:分布式 RabbitMQ基礎
目錄
1同步調用
2異步調用
?3RabbitMQ介紹
4入門?
1數據隔離
2 spring amqp?
5 hello word 案例
?1引入spring-amgp依賴
?2配置RabbitMQ服務端信息
3發(fā)送消息
4接收消息
6 Work Queues
7交換機
1Fanout交換機
創(chuàng)建隊列
可以使用默認的交換機也可以自己創(chuàng)建交換機
?編輯?交換機與隊列進行綁定
?編輯?2Direct交換機
3Topic交換機
4Topic交換機?
5申明隊列和交換機?
6消息轉換器
1同步調用
按照123的順序依次執(zhí)行
?如果每個業(yè)務都用50ms,呢么整個支付服務完成,則需要的時間是幾個小demo的時間加和
所以同步調用會出現(xiàn) 擴展性差 性能下降 級聯(lián)失?。ㄒ粋€小demo失效了,整個業(yè)務都失效了)的問題,但是某些業(yè)務只能使用同步調用
2異步調用
這里的消息代理類比于外賣柜,消息發(fā)送者類比于外賣員,消息接受者類比于點外賣的人?
更改為異步調用就如下
?3RabbitMQ介紹
使用docker安裝
docker run
-e RABBITMQ DEFAULT USER=itheima\ 這里設置用戶名和密碼
-e RABBITMO DEFAULT PASS=123321\
-v mq-plugins:/plugins
--name mq\
--hostname mq\
-p15672:15672\
-p5672:56721
--network hmall\
-d\
rabbitmq:3.8-management
安裝完成后 訪問192.168.150.101:15672
基本模型
4入門?
創(chuàng)建隊列
交換機負責路由轉發(fā)
此時再看queue里邊 已經和交換機綁定
1數據隔離
通過virtual host
創(chuàng)建一個用戶
不同的virtual host對數據隔離
2 spring amqp?
5 hello word 案例
沒有交換機
?1引入spring-amgp依賴
?2配置RabbitMQ服務端信息
3發(fā)送消息
@SpringBootTest
public class SpringAmqpTest
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
void testSendMessage2Queue(){
String queueName "simple.queue";
String msg "hello,amqp!";
rabbitTemplate.convertAndSend (queueName,msg);
}
4接收消息
@Slf4j
@Component
public class MqListener
@RabbitListener (queues "simple.queue")
public void listensimpleQueue(string msg){
System.out.println("消費者收到了simple.queuel的消息:【"+msg+"】r);
}
?
6 Work Queues
收消息?
@RabbitListener(queues "work.queue")
public void listenworkQueuel(String msg){
System.out.println("消費者1收到了work.queue的消息:【"+msg+"】");
}
@RabbitListener (queues "work,queue")
public void listenworkQueue2(String msg){
System.out.println("消費者2收到了work.queue的消息:【"+msg+"】");
}
發(fā)消息
@Test
void testworkQueue(){
String queueName "work.queue";
for (int i 1;i <50;i++){
String msg hello,worker,message_+i;
rabbitTemplate.convertAndSend(queueName,msg);
}
}
實現(xiàn)能者多勞?
7交換機
1Fanout交換機
?廣播模式
創(chuàng)建隊列
可以使用默認的交換機也可以自己創(chuàng)建交換機
?交換機與隊列進行綁定
?2Direct交換機
綁定key
接收
發(fā)送
@Test
void testSendDirect(){
String exchangeName ="hmall direct";
string msg="紅色警報";
rabbitTemplate.convertAndSend(exchangeName,routingKey:"red",msg);
}
3Topic交換機
4Topic交換機?
topic能干的事direct也能干,但是topic更加方便
5申明隊列和交換機?
代碼實現(xiàn) 不使用可視化
基于代碼
基于注解(這個更好用 更便利 更能適合于場景)
6消息轉換器
Spring的對消息對象的處理是由org.springframework.amqp.support.converter.MessageConverter來處理的。而 默認實現(xiàn)是SimpleMessageConverter,基于JDK的ObjectOutputStream完成序列化。 存在下列問題: ·JDK的序列化有安全風險 ·DK序列化的消息太大 ·JDK序列化的消息可讀性差
解決方案:
柚子快報邀請碼778899分享:分布式 RabbitMQ基礎
文章鏈接
本文內容根據網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉載請注明,如有侵權,聯(lián)系刪除。