SpringBoot學習之路---使用RabbitTemplate操作RabbitMq

在學習了RabbitMq之後,我們知道當打開RabbitMq服務時,訪問15672端口可以進入web管理界面,並且可以在裏面操作,如發送消息,從某個隊列中接受消息。但是我們平時在程序實際運行中,不可能一直手動地來完成這些操作(因爲我們不知道什麼時候需要發送接受消息,而且這樣效率很低)。在基於消息隊列的程序中,我們需要編寫程序來完成從消息隊列自動收發消息的操作,這一篇就來記錄怎麼使用java來完成這一操作


在此之前我們現在web管理界面創建好一些exchangequeue,並且綁定好它們之間的路由規則。

exchange:

在這裏插入圖片描述
queue:

在這裏插入圖片描述
綁定規則這裏略。

接着需要引入一個maven依賴:

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
		<dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>

引入之後就可以操作RabbitMq了,這裏要介紹一個類RabbitTemplate,顧名思義,這個類的作用和JdbcTemplateRedisTemplate作用大致相同,只不過操作的是RabbitMq。接下來我們就要去使用它。

在我們引入maven相關依賴後,SpringBoot會自動幫我們注入RabbitTemplate,在RabbitAutoConfiguration中可以看到相關源碼:

		@Bean //幫我們注入了該對象,可以直接使用
        @ConditionalOnSingleCandidate(ConnectionFactory.class)
        @ConditionalOnMissingBean({RabbitOperations.class})
        public RabbitTemplate rabbitTemplate(RabbitProperties properties, ObjectProvider<MessageConverter> messageConverter, ObjectProvider<RabbitRetryTemplateCustomizer> retryTemplateCustomizers, ConnectionFactory connectionFactory) {

在測試類中編寫方法進行測試:

@SpringBootTest
class SpringRabbitmqApplicationTests {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Test
    void contextLoads() {
        rabbitTemplate.convertAndSend("exchange.direct","leslie",new User("leslie","1234567"));

    }

}

rabbitTemplate的convertAndSend()方法可以給指定隊列發送消息,函數有三個參數,第一個是**交換機(exchange)的名字,第二個是路由鍵(routing-key)**的名字,第三個則爲消息的內容。 我們這裏給名叫exchange.direct的交換機發送一個User對象,其中路由鍵爲leslie,因爲交換機類型是direct,所以是點對點的消息隊列,只會發送到名叫leslie的隊列中,運行程序,去web管理界面查看是否發送成功:

在這裏插入圖片描述
可以看到消息以及發送成功了,只不過它把我們消息的內容序列化了,這裏因爲它默認使用的還是jdk的序列化,和之前介紹redis時一樣,我們需要把它的默認序列化器更改爲json類型的序列化器(可以翻看以前的博客)。

這裏直接說方法,直接編寫一個配置類,並往容器內注入MessageConverter接口的實現類對象:

@Configuration
public class RabbitMqConfiguration {

    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }
}

其中返回的Jackson2JsonMessageConverter其實就是我們需要的json類型的序列化器,當容器中有MessageConverter類型的組件時,SpringBoot就會調用我們自己編寫的序列化器了,接着在運行一次,在web管理界面查看消息:

在這裏插入圖片描述
可以看到以及成功轉爲json類型的數據了,這樣觀看更加直觀。

接着介紹RabbitTemplate的另外一個方法,我們說完發消息,那肯定需要一個取消息了,receiveAndConvert()方法用來取消息,裏面有一個參數是隊列(queue)的名字,表示要從那個隊列中取數據

在測試方法的後面加上:

        Object leslie = rabbitTemplate.receiveAndConvert("leslie");
        System.out.println(leslie);

它的返回值是object類型的,當然也可以強轉,這裏就省略了,我們看看運行,看看控制檯是否有顯示:
在這裏插入圖片描述
可以看到操作成功.


在導入maven相關依賴後,它不僅幫我們注入了RabbitTemplate對象用來操作RabbitMq發送接受消息,還幫我們注入了AcmqAdmin對象用來管理RabbitMq,它的作用是創建一些exchangequeue或者移動,刪除它們。具體的操作可以查看它類上的方法命名去使用它們,這裏不做介紹了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章