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
*/
@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
OpenStack中的rabbitmq的配置方法
server plugin style lis setting creating 開機 alt .cn OpenStack中的rabbitmq的配置方法 author:headsen chen 2017-10-11 17:24:58