1. 程式人生 > >RabbitMQ實戰-在服務中配置RabbitMQ實現訊息傳送

RabbitMQ實戰-在服務中配置RabbitMQ實現訊息傳送

在這裡以訂單服務為訊息生產者,程式碼中都有詳細的註釋和說明,以下是示例:

新增依賴
首先,建立一個web工程(在這裡我使用springboot2.0.2)。加入rabbitMQ所需要的依賴:

        <!-- rabbitmq依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
同時,我也添加了一些常用依賴

                <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
 
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
配置RabbitMQ
然後,我們需要在專案中配置RabbitMQ

1、配置連線資訊
spring:
  rabbitmq:
    host: 116.85.38.99
    port: 5672
    username: xxxxx
    password: xxxxx
2、配置訊息交換機  exchange
新建一個配置類,配置一個訊息交換機

package com.space.rbq.order.config;
 
import org.springframework.amqp.core.DirectExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * 訊息交換機配置  可以配置多個
 * @author zhuzhe
 * @date 2018/5/25 15:40
 * @email

[email protected]
 */
@Configuration
public class ExchangeConfig {
 
    /** 訊息交換機1的名字*/
    public final String EXCHANGE_01 = "first_exchange";
 
    /**
     *   1.定義direct exchange,繫結first_exchange
     *   2.durable="true" 持久化交換機, rabbitmq重啟的時候不需要建立新的交換機
     *   3.direct交換器相對來說比較簡單,匹配規則為:如果路由鍵匹配,訊息就被投送到相關的佇列
     *     fanout交換器中沒有路由鍵的概念,他會把訊息傳送到所有繫結在此交換器上面的佇列中。
     *     topic交換器你採用模糊匹配路由鍵的原則進行轉發訊息到佇列中
     */
    @Bean
    public DirectExchange directExchange(){
        DirectExchange directExchange = new DirectExchange(EXCHANGE_01,true,false);
        return directExchange;
    }
}
3、配置佇列  queue
注:在這裡,我們只使用到第一個佇列  FirstQueue

package com.space.rbq.order.config;
 
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * 佇列配置  可以配置多個佇列
 * @author zhuzhe
 * @date 2018/5/25 13:25
 * @email [email protected]
 */
@Configuration
public class QueueConfig {
 
    /*對列名稱*/
    public static final String QUEUE_NAME1 = "first-queue";
    public static final String QUEUE_NAME2 = "second-queue";
    public static final String QUEUE_NAME3 = "third-queue";
 
    @Bean
    public Queue firstQueue() {
        /**
         durable="true" 持久化訊息佇列 , rabbitmq重啟的時候不需要建立新的佇列
         auto-delete 表示訊息佇列沒有在使用時將被自動刪除 預設是false
         exclusive  表示該訊息佇列是否只在當前connection生效,預設是false
         */
        return new Queue(QUEUE_NAME1,true,false,false);
    }
 
    @Bean
    public Queue secondQueue() {
        return new Queue(QUEUE_NAME2,true,false,false);
    }
 
    @Bean
    public Queue thirdQueue() {
        // 配置 自動刪除
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-message-ttl", 60000);//60秒自動刪除
        return new Queue(QUEUE_NAME3,true,false,true,arguments);
    }
}
4、將交換機和佇列進行繫結
新建一個RabbitMQConfig配置類,將交換機和佇列繫結

package com.space.rbq.order.config;
 
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
/**
 * RabbitMq配置
 * @author zhuzhe
 * @date 2018/5/25 13:37
 * @email [email protected]
 */
@Configuration
public class RabbitMqConfig {
 
    /**
     * key: queue在該direct-exchange中的key值,當訊息傳送給direct-exchange中指定key為設定值時,
     * 訊息將會轉發給queue引數指定的訊息佇列
     */
    /** 佇列key1*/
    public static final String ROUTING_KEY_1 = "queue_one_key1";
 
    @Autowired
    private QueueConfig queueConfig;
 
    @Autowired
    private ExchangeConfig exchangeConfig;
 
    /**
     * 將訊息佇列1和交換機1進行繫結,指定佇列key1
     */
    @Bean
    public Binding binding_one() {
        return BindingBuilder.bind(queueConfig.firstQueue()).to(exchangeConfig.directExchange()).with(RabbitMqConfig.ROUTING_KEY_1);
    }
}
這樣,我們就完成了RabbitMq的配置,並且成功建立了訊息交換機和佇列,將其進行繫結。

傳送訊息
新建一個Order類,模擬訂單。同時新建一個OrderController,用於傳送訊息。

package com.space.rbq.order.bean;
import lombok.Data;
import java.io.Serializable;
 
/**
 * Order
 * @author zhuzhe
 * @date 2018/6/7 9:49
 * @email [email protected]
 */
@Data
public class Order implements Serializable{
 
    private Long id;
 
    private Double price;
 
    private String remark;
}
package com.space.rbq.order.controller;
 
import com.google.gson.Gson;
import com.space.rbq.order.bean.Order;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import java.util.UUID;
 
/**
 * @author zhuzhe
 * @date 2018/6/7 9:48
 * @email [email protected]
 */
@Slf4j
@RequestMapping("/order")
@RestController
public class OrderController {
 
    @Autowired
    private RabbitTemplate rabbitTemplate;
 
    /**
     * 儲存order , 同時需要向store服務傳送通知減庫存
     * @param order
     * @return
     */
    @PostMapping("/save")
    public Order saveOrder(Order order){
        log.info(order.toString());
        Gson gson = new Gson();
        //將order轉換為json字串,便於傳輸
        String json = gson.toJson(order);
        String msgId = UUID.randomUUID().toString();
        /**
         * 傳送訊息
         * 指定訊息交換機  "first_exchange"
         * 指定佇列key    "queue_one_key1"
         */
        rabbitTemplate.convertAndSend("first_exchange", "queue_one_key1",
                json, new CorrelationData(msgId));
        return order;
    }
}
RabbitTemplate是springboot整合rabbitMq為我們預設提供的。裡面有一些預設的配置和方法,我們可以直接使用它來發送訊息。我們可以大概看看

呼叫convertAndSend方法就可以傳送訊息。在這裡需要指定訊息交換機和key。這樣就可以將訊息傳送給指定的隊列了(佇列和交換機通過key在之前已經繫結過了)

此時,我們只需要啟動工程,呼叫saveOrder介面,就可以成功將訊息傳送出去。

至此,就成功實現了訊息的傳送。下節,我們會通過庫存服務訂閱該訊息,實現訊息的消費。
--------------------- 
作者:朱_哲 
來源:CSDN 
原文:https://blog.csdn.net/zhuzhezhuzhe1/article/details/80704136 
版權宣告:本文為博主原創文章,轉載請附上博文連結!

相關推薦

RabbitMQ實戰篇8-在庫存服務配置RabbitMQ實現訊息接收

上節介紹瞭如何實現訊息的傳送,這節我們接著上節說說如何實現訊息的接收。 新增依賴,進行配置 同樣的,訊息消費者也需要新增RabbitMQ的依賴,配置連線資訊。 因為在上一節已經說過了,這裡過於依賴和連線資訊的配置就不在贅述了。 訂閱訊息 新建一個OrderConsumer,用於訂閱和消費訊

RabbitMQ實戰-在服務配置RabbitMQ實現訊息傳送

在這裡以訂單服務為訊息生產者,程式碼中都有詳細的註釋和說明,以下是示例: 新增依賴 首先,建立一個web工程(在這裡我使用springboot2.0.2)。加入rabbitMQ所需要的依賴:         <!-- rabbitmq依賴 -->       

如何在Linux虛擬機配置rabbitMQ

width wid blog 修改 開啟 ges bsp eight 端口 1.配置Erlang環境的linux虛擬機 配置的步驟直接上圖: 2.rabiitMQ安裝到linux 直接上圖: 2.1安裝MQ 2.2修改rabb

SpringBoot整合RabbitMQ實現訊息傳送和消費

下載安裝Erlang和RabbitMQ Erlang和RabbitMQ:https://www.cnblogs.com/theRhyme/p/10069611.html   專案建立和依賴 推薦SpringCloud專案線上建立:https://start.spring.io/ 不用上面這

springboot rabbitMQ 自定義MessageConverter和ClassMapper實現訊息序列化

背景:公司專案使用springboot + rabbitMQ 處理訂單和推送訊息,最開始的時候,producer都是直接convertAndSend的json資料, consumer也是接收json資料,然後在轉化為Bean去處理邏輯。當然,這樣雖然沒啥大問題,但是感覺很麻煩,後來查閱文件,

CentOS 6.5配置RabbitMQ

先配置erlang依賴環境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 安裝erlang 16B03 rpm --import http://binaries.erlang-solutions

RabbitMQ實戰:擴展RabbitMQ與系列總結

RabbitMQ本系列是「RabbitMQ實戰:高效部署分布式消息隊列」書籍的總結筆記。 本篇是「RabbitMQ實戰」系列的最後一篇,主要介紹RabbitMQ插件,了解如何安裝和啟用它,列舉一些常用的插件,以及如何自定義。 在介紹之前,先總結下本系列的主要內容,把它們串起來。 系列總結 開篇時,這樣定義過

SpringBoot使用redis實現訊息佇列

在pom中加入redis依賴: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-r

PHPStorm 配置 XDebug 實現斷點除錯

引用:http://laichuanfeng.com/work/configuring-xdebug-with-phpstrom/ 在 PhpStorm 中,配合使用 Xdebug ,可以很方便的實現斷點除錯 1、下載 Xdebug 如果你是使用 XAMPP 的環境

PHP利用redis實現訊息佇列處理高併發請求

將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.0.1',6379); for($i=0;$i<50;$i++){

PHP利用redis實現訊息佇列處理高併發請求--簡潔程式碼實現效果

將請求存入redis 為了模擬多個使用者的請求,使用一個for迴圈替代 //redis資料入隊操作 $redis = new Redis(); $redis->connect('127.0.

PHP使用ActiveMQ實現訊息佇列

前面我們已經學了如何部署ActiveMQ, 我們知道通過ActiveMQ的一個管理後臺可以檢視任務佇列。 今天 用PHP來操作ActiveMQ,我們可以藉助一個第三方擴充套件。 下載: composer require fusesource/s

spring整合apache activemq實現訊息傳送的三種方式程式碼配置例項

我們專案中傳送事件告警要用到訊息佇列,所以學習了下activemq,整理如下: activemq的介紹就不用說了,官網上大家可以詳細的看到。 1.下載並安裝activemq:地址http://activemq.apache.org/activemq-590-rel

阿裏雲服務配置phpstudy實現域名訪問【圖文教程】

rfi 生成 綠色 cin 分享 步驟 ecc targe 運行 首先,運行phpStudy,確保Apache和MySql啟動,綠色代表正常啟動狀態。 然後配置站點域名,打開phpStudy的站點域名管理,1、設置域名(你有的域名,最後需要域名解析);2、設置

Springboot 2.0.x 簡單整合Rabbit MQ 並實現訊息傳送和消費【Windows 環境下】

文章目錄 Springboot 2.0.x 簡單整合Rabbit MQ 並實現訊息傳送和消費【Windows 環境下】 1、rabbit mq 基礎支援,安裝 Erlang 環境 2、安裝 ra

MQTT初體驗mosquitto的java實現 訊息傳送成功

MQTT初體驗mosquitto的java實現 2017年02月10日 17:28:45 閱讀數:15702 上節簡單描述了mosquitto的安裝,與測試,本節繼續MQTT使用java語言如何簡單呼叫; 以上例子原型來源於網路,經過自己除錯可用,目前僅限於程式碼

Linux配置sendmail實現PHP傳送郵件

1.安裝sendmail yum -y install sendmail 2.安裝mail命令 yum -y install mailx 3.開啟sendmail /etc/rc.d/init.d/sendmail start 4.設定開機啟動 vim /etc/rc.local 最後一行新增上:

SpringBoot通過kafka實現訊息傳送與接收(包括不能傳送和消費kafka訊息的採坑記錄)

kafka採坑記錄:     1、kafka服務端server.properties中的broker.id叢集內需要唯一。     2、kafka config檔案中listeners和advertised.listeners需要配置本機ip:9092地址,不然消費不到資

(四)RabbitMQ訊息佇列-服務詳細配置與日常監控管理

RabbitMQ服務管理 啟動服務:rabbitmq-server -detached【 /usr/local/rabbitmq/sbin/rabbitmq-server -detached 】 檢視狀態:rabbitmqctl status 關閉服務:rabbitmqctl stop

OpenStackrabbitmq配置方法

server plugin style lis setting creating 開機 alt .cn OpenStack中的rabbitmq的配置方法 author:headsen chen 2017-10-11 17:24:58