springboot2.0集成rabbitmq的示例代碼
安裝rabbitmq
簡介: rabbitmq即一個消息隊列,主要用來實現(xiàn)應(yīng)用程序的異步和解耦,消息緩沖,消息分發(fā)的作用.
由于rabbitmq依賴于erlang語言,所以先安裝erlang:
添加erlang solutions源
$ wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm $ sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm $ sudo yum install erlang
erlang完成后安裝rabbitmq:
先下載rpm:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm
下載完成后安裝:
yum install rabbitmq-server-3.6.6-1.el7.noarch.rpm
安裝時如果遇到下面的依賴錯誤
Error: Package: socat-1.7.2.3-1.el6.x86_64 (epel)
Requires: libreadline.so.5()(64bit)
可以嘗試先執(zhí)行
$ sudo yum install socat
rabbitmq的基本操作:
$ sudo chkconfig rabbitmq-server on # 添加開機啟動RabbitMQ服務(wù) $ sudo /sbin/service rabbitmq-server start # 啟動服務(wù) $ sudo /sbin/service rabbitmq-server status # 查看服務(wù)狀態(tài) $ sudo /sbin/service rabbitmq-server stop # 停止服務(wù) #查看當前所有用戶 $ sudo rabbitmqctl list_users #查看默認guest用戶的權(quán)限 $ sudo rabbitmqctl list_user_permissions guest #由于RabbitMQ默認的賬號用戶名和密碼都是guest。為了安全起見, 先刪掉默認用戶 $ sudo rabbitmqctl delete_user guest #添加新用戶 $ sudo rabbitmqctl add_user username password #設(shè)置用戶tag $ sudo rabbitmqctl set_user_tags username administrator #賦予用戶默認vhost的全部操作權(quán)限 $ sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*" #查看用戶的權(quán)限 $ sudo rabbitmqctl list_user_permissions username
開啟遠程訪問
默認情況下,RabbitMQ的默認的guest用戶只允許本機訪問, 如果想讓guest用戶能夠遠程訪問的話,只需要將配置文件中的loopback_users列表置為空即可,如下:
{loopback_users, []}
另外關(guān)于新添加的用戶,直接就可以從遠程訪問的,如果想讓新添加的用戶只能本地訪問,可以將用戶名添加到上面的列表, 如只允許admin用戶本機訪問。
{loopback_users, ["admin"]}
更新配置后,重啟服務(wù).
###springboot2.0集成rabbitmq
pom引入start依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency>
application.properties配置:
#rabbitmq config begin # rabbitmq服務(wù)器地址 (默認為127.0.0.1) spring.rabbitmq.host=127.0.0.1 # rabbitmq服務(wù)器連接端口 (默認為5672) spring.rabbitmq.port=5672 spring.rabbitmq.username=admin spring.rabbitmq.password=123456 #rabbitmq config end
rabbitmq javabean配置:
package com.snow.config;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @Description: RabbitConfig
* @Author: 愛飄de小子
* @CreateDate: 2018/8/15 19:59
* @Version: 1.0
*/
@Configuration
public class RabbitConfig {
/**
* 消費者數(shù)量,默認10
*/
public static final int DEFAULT_CONCURRENT = 10;
/**
* 每個消費者獲取最大投遞數(shù)量 默認50
*/
public static final int DEFAULT_PREFETCH_COUNT = 50;
/**
* 注入 Queue
* @return
*/
@Bean
public Queue Queue() {
return new Queue("hello");
}
/**
* 并發(fā)消費配置
* @param configurer
* @param connectionFactory
* @return
*/
@Bean("pointTaskContainerFactory")
public SimpleRabbitListenerContainerFactory pointTaskContainerFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setPrefetchCount(DEFAULT_PREFETCH_COUNT);
factory.setConcurrentConsumers(DEFAULT_CONCURRENT);
configurer.configure(factory, connectionFactory);
return factory;
}
}
發(fā)送消息:
/**
* 注入AmqpTemplate
*/
@Autowired
private AmqpTemplate rabbitTemplate;
public void sendMessage(){
//發(fā)送消息
this.rabbitTemplate.convertAndSend("hello","你好,rabbitmq");
}
convertAndSend方法的第一個參數(shù)為QueueName,第二個參數(shù)為消息的內(nèi)容
接收消息:
/**
* 消息接受
* @param message
*/
@RabbitListener(queues = "hello") //監(jiān)聽器監(jiān)聽指定的QueueName
public void receive(String message) {
System.out.println("接收消息:" + message);
}
并發(fā)消費:
sendMessage() 發(fā)送消息后,receive() 接受消息,此時receive()接受消息,等待處理完成后,下一個消息才能進入receive(),如果想要消息異步消費,還需配置并發(fā)消費:
/**
* 消息接受 并發(fā)消費
* @param message
*/
@RabbitListener(queues = "hello",containerFactory = "pointTaskContainerFactory")
public void receive(String message) {
System.out.println("接收消息:" + message);
}
@RabbitListener注解中的containerFactory 是RabbitConfig配置的pointTaskContainerFactory,可以自定義如下參數(shù):
/** * 消費者數(shù)量,默認10 */ public static final int DEFAULT_CONCURRENT = 10; /** * 每個消費者獲取最大投遞數(shù)量 默認50 */ public static final int DEFAULT_PREFETCH_COUNT = 50;
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- RabbitMQ 3.9.7 鏡像模式集群與Springboot 2.5.5 整合
- SpringAMQP消息隊列(SpringBoot集成RabbitMQ方式)
- 一文掌握Springboot集成RabbitMQ的方法
- springboot2.5.6集成RabbitMq實現(xiàn)Topic主題模式(推薦)
- Springboot集成RabbitMQ死信隊列的實現(xiàn)
- SpringBoot集成RabbitMQ的方法(死信隊列)
- Spring Boot系列教程之7步集成RabbitMQ的方法
- springboot集成rabbitMQ之對象傳輸?shù)姆椒?/a>
- spring boot集成rabbitmq的實例教程
- 詳解spring boot集成RabbitMQ
- Spring Boot 3 集成 RabbitMQ 實踐指南(原理解析)
相關(guān)文章
解決springboot項目上傳文件出現(xiàn)臨時文件目錄為空的問題
這篇文章主要介紹了解決springboot項目上傳文件出現(xiàn)臨時文件目錄為空的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09
spring-data-redis 動態(tài)切換數(shù)據(jù)源的方法
最近遇到了一個麻煩的需求,我們需要一個微服務(wù)應(yīng)用同時訪問兩個不同的 Redis 集群,一般情況下我們會怎么處理呢,下面通過場景分析給大家介紹spring-data-redis 動態(tài)切換數(shù)據(jù)源的方法,感興趣的朋友一起看看吧2021-08-08
LambdaQueryWrapper與QueryWrapper的使用方式
這篇文章主要介紹了LambdaQueryWrapper與QueryWrapper的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05
[Spring MVC]-詳解SpringMVC的各種參數(shù)綁定方式
本篇文章主要介紹了SpringMVC的各種參數(shù)綁定方式 ,具有一定的參考價值,有需要的可以了解一下。2016-12-12
SpringTask實現(xiàn)定時任務(wù)方法講解
通過重寫Schedu lingConfigurer方法實現(xiàn)對定時任務(wù)的操作,單次執(zhí)行、停止、啟動三個主要的基本功能,動態(tài)的從數(shù)據(jù)庫中獲取配置的定時任務(wù)cron信息,通過反射的方式靈活定位到具體的類與方法中2023-02-02

