當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
SpringBoot高级-消息-AmqpAdmin管理组件的使用
生活随笔
收集整理的這篇文章主要介紹了
SpringBoot高级-消息-AmqpAdmin管理组件的使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前提是消息隊列和exchanges創建好了,如果沒有創建好,我們程序重要怎么去創建這些呢,我們就可以使用一個組件,叫AmqpAdmin,因為我們要使用程序臨時的創建一些,綁定規則,或者創建一些消息隊列,我們就來采用它,他來幫我們創建和刪除,這些Queue,這些消息隊列,Exchange交換器,包括這些綁定規則,我們就來測試類里面來測試一下,AmqpAdmin,我們只需要一個Autowired,@Autowired
AmqpAdmin amqpAdmin;RabbitAutoConfiguration,這個類里面給我們注入的組件,@Bean
@ConditionalOnSingleCandidate(ConnectionFactory.class)
@ConditionalOnProperty(prefix = "spring.rabbitmq", name = "dynamic", matchIfMissing = true)
@ConditionalOnMissingBean(AmqpAdmin.class)
public AmqpAdmin amqpAdmin(ConnectionFactory connectionFactory) {return new RabbitAdmin(connectionFactory);
}這是一個系統管理組件,用它來創建消息隊列等等,我們先來創建一個Exchange,對amqpAdmin里面,他有一些方法,declare里面是創建一些組件,相反的有一些remove和delete,是刪除一些組件,我先來創建一個exchange,我們在這創建exchange的時候呢,我們要傳一個exchange對象org.springframework.amqp.core.Exchangepublic interface Exchange extends Declarable {這個接口下邊有很多的實現,有一個抽象的Exchange,我們要創建哪種類型的Exchange,是要Direct類型,還是Fanout,還是Topic,還是Header,那我們就以direct為例,那我們就可以寫一個DirectExchange,我們在創建這個Exchange的時候呢,我們點進來,org.springframework.amqp.core.DirectExchange我們可以傳入一些規則,比如我們Exchange的名字,他是不是持久化的,是否刪除的,我們默認傳一個名字就行了public class DirectExchange extends AbstractExchange {public static final DirectExchange DEFAULT = new DirectExchange("");public DirectExchange(String name) {super(name);}public DirectExchange(String name, boolean durable, boolean autoDelete) {super(name, durable, autoDelete);}public DirectExchange(String name, boolean durable, boolean autoDelete, Map<String, Object> arguments) {super(name, durable, autoDelete, arguments);}@Overridepublic final String getType() {return ExchangeTypes.DIRECT;}}我們用amqpadmin工具創建的一個exchange,名字就叫他,這個創建完了我們在控制臺輸出一下,創建完成,默認是沒有我們這個的amqpadmin.exchange
package com.learn.springboot;import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import com.learn.bean.Book;@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootAmqpApplicationTests {@AutowiredAmqpAdmin amqpAdmin;@Testpublic void createExchange() {amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));System.out.println("創建完成");}}
我們在這創建一下,運行成功我們就發現這里已經有了
其他的創建都一樣,比如我創建一個Exchange,我來創建一個隊列,這里有declareQueue,這個創建不傳名字的情況下,它是默認隨機給一個名字,這個是Queue隊列,他們是一個類不是一個接口,那我們就直接來new,new一個Queue,隊列的詳細信息,我們點進來,可以只傳隊列的名字,和是否持久化,很多種構造器,我們就選用兩個的,我們就來叫amqpadmin.queue,org.springframework.amqp.core.Queue.Queue(String)/*** The queue is durable, non-exclusive and non auto-delete.** @param name the name of the queue.*/
public Queue(String name) {this(name, true, false, false);
}/*** Construct a new queue, given a name and durability flag. The queue is non-exclusive and non auto-delete.** @param name the name of the queue.* @param durable true if we are declaring a durable queue (the queue will survive a server restart)*/
public Queue(String name, boolean durable) {this(name, durable, false, false, null);
}我們的隊列的名字就叫他,然后它是否是持久化的,我們寫一個true,這是一個隊列,我們來執行一下,看隊列能不能創建愛你出來,amqp隊列沒問題
@AutowiredAmqpAdmin amqpAdmin;@Testpublic void createExchange() {
// amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
// System.out.println("創建完成");amqpAdmin.declareQueue(new Queue("amqpadmin.queue"));}
隊列創建出來以后呢,講exchange和隊列綁定起來,創建綁定規則,綁定我們就可以使用了,declareBinding,Binding我們來搜一下,new一個Binding,而New的時候傳哪些參數org.springframework.amqp.core.Bindingpublic Binding(String destination, DestinationType destinationType, String exchange, String routingKey,Map<String, Object> arguments) {this.destination = destination;this.destinationType = destinationType;this.exchange = exchange;this.routingKey = routingKey;this.arguments = arguments;
}第一個destination目的地,第二個是目的地類型,這目的地類型有兩種,你是要綁定一個消息隊列,還是綁定一個交換器public enum DestinationType {QUEUE, EXCHANGE;
}然后我們在這里要寫交換器的名字,包括有一些參數頭,我們就直接來寫我們的綁定,第一個destination,目的地就發布到這,類型綁定的是一個隊列,我們來寫上一個隊列,還有一個信息,第三個信息,是我們exchange的類型,我們來給哪個exhange來綁這個隊列,Exchange就是我們前面創建的Exchange,我們再來看第四個數據,routingKey,我們的路由件,我們來寫一個路由件,我們是根據路由件,來發布給誰,路由件我們就叫amqp.haha,我們還要傳入參數,傳入一個map的參數,沒有我就直接寫一個null,這個我們就聲明了一個綁定,我先不運行,不運行前我先看一下Exchange,它里面默認是沒有什么綁定規則的
@AutowiredAmqpAdmin amqpAdmin;@Testpublic void createExchange() {
// amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
// System.out.println("創建完成");// amqpAdmin.declareQueue(new Queue("amqpadmin.queue"));amqpAdmin.declareBinding(new
Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,"amqpadmin.exchange",
"amqp.haha",null));}
我們發現綁定也是成功了,我在這刷新一下,我們發現綁定規則已經顯示在這兒了
我們這個exchange綁定了amqpqueue,路由key叫他,我們可以在這里解綁,相當于我們用amqp就可以操作這些東西,當然這是綁定,delete只要寫名字,大家來一一嘗試
?
總結
以上是生活随笔為你收集整理的SpringBoot高级-消息-AmqpAdmin管理组件的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot高级-消息-@Rab
- 下一篇: SpringBoot高级-检索-Elas