rabbitmq(一)-基礎入門

大佬健發表於2020-11-08

原文地址:https://www.jianshu.com/p/e186a7fce8cc

在學東西之前,我們先有一個方法論,知道如何學習。學習一個東西一般都遵循以下幾個環節:

  1. xxx是什麼,誕生的原因,能解決什麼問題。
  2. 如何安裝,如何使用(快起啟動一個demo)。
  3. 涉及到的一些基礎概念介紹和基礎入門使用。
  4. 中階、高階的功能特性使用。
  5. 高可用部署方案。
  6. 原理的深入理解。

這篇文章主要處於第一、二環節,讓新手更好得入門。

1、rabbitmq是什麼

rabbitmq 是目前非常熱門的一款訊息中介軟體。Rabbit 這樣名字,是因為兔子行動非常迅速且繁殖起來非常瘋狂, RabbitMQ 的開創者認為以此命名這個分散式軟體再合適不過了。

RabbitMQ 是採用 Erlang 語言實現 AMQP (Advanced Message Queuing Protocol,高階訊息佇列協議)的訊息中介軟體,它最初起源於金融系統,所以rabbitmq的特點是可靠性傳輸,效能在可靠性後面

2、為什麼要使用mq,為什麼要選rabbitmq

為什麼要使用mq?

mq一般有兩種模式
一種是點對點模式:主要是為了削峰和非同步。
另一種是廣播模式:主要是為了業務之間的解耦。

簡單說就是業務有需要對流量削峰的場景,有需要對業務解耦場景。

為什麼要選rabbitmq?

rabbitmq的特點如下:
1、可靠性: RabbitMQ是為了金融系統而生, 所以特地使用一些機制來保證可靠性,如持久化、傳輸確認及釋出確認等。
2、靈活的路由器:4種路由器
3、擴充套件性:多個 rabbitmq 節點可以組成個叢集,也可以根據實際業務情況動態地擴充套件叢集中節點。
4、高可用:擁有映象佇列防止容災訊息丟失。

讓我們使用mq產品做重要的業務處理(例如金額、訂單)的時候,我們最基本的述求是
1、可靠穩定,訊息不丟失。
2、有叢集容災方案。
3、靈活的功能特性。
4、效能在可靠的基礎上
rabbitmq都能完美勝任。

4、rabbitmq的安裝

這裡只介紹docker安裝方式
docker run -d --name myrabbit1 -p 15672:15672 -p 5672:5672 rabbitmq:3.6.15-management

安裝之後訪問 localhost:15672(localhost改伺服器ip)見到如下介面代表安裝成功。

使用預設賬號guest/guest登入

管理臺的介面後續再一個一個地方詳細講解。

4、快速使用的demo
這裡以springboot為例子展示如何快速使用rabbitmq
4.1 新建springboot工程同時增加配置

spring.rabbitmq.host=localhost
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

4.2 引入ampq的springboot-start依賴

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

4.3 新建配置檔案,初始化佇列

@Configuration
public class RabbitMqConfig {
    @Bean
    public Queue demo(){
        Queue demo = new Queue("demo");
        return demo;
    }
}

4.4 新建消費者、生產者。

@RestController
@RequestMapping
public class Controller {
    @Autowired
    private RabbitTemplate rabbitTemplate;
    @GetMapping("sendMq")
    public String sendMq(String msg){
        rabbitTemplate.convertAndSend("demo",msg);
        return msg;
    }
}
@Component
public class DemoLister {
    @RabbitListener(queues = "demo")
    public void Lister(Message message){
        byte[] body = message.getBody();
        System.out.println("接受到的訊息體:"+new String(body));
    }
}

4.5 傳送訊息檢視效果
執行命令curl localhost:8080/sendMq?msg=abc
檢視效果

5、最後
git clone -b teacher-1 https://gitee.com/guoeryyj/rabbitmq-teacher.git下載試例程式碼x