溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

rabbitmq如何在springboot2.0中使用

發布時間:2021-04-07 16:39:28 來源:億速云 閱讀:217 作者:Leah 欄目:編程語言

rabbitmq如何在springboot2.0中使用?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

安裝rabbitmq

簡介: rabbitmq即一個消息隊列,主要用來實現應用程序的異步和解耦,消息緩沖,消息分發的作用.

由于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)

可以嘗試先執行

$ sudo yum install socat

rabbitmq的基本操作:

$ sudo chkconfig rabbitmq-server on # 添加開機啟動RabbitMQ服務
 
$ sudo /sbin/service rabbitmq-server start # 啟動服務
 
$ sudo /sbin/service rabbitmq-server status # 查看服務狀態
 
$ sudo /sbin/service rabbitmq-server stop # 停止服務
 
#查看當前所有用戶
 
$ sudo rabbitmqctl list_users
 
#查看默認guest用戶的權限
 
$ sudo rabbitmqctl list_user_permissions guest
 

#由于RabbitMQ默認的賬號用戶名和密碼都是guest。為了安全起見, 先刪掉默認用戶
 
$ sudo rabbitmqctl delete_user guest
 
 
 
#添加新用戶
 
$ sudo rabbitmqctl add_user username password
 
#設置用戶tag
 
$ sudo rabbitmqctl set_user_tags username administrator
 
#賦予用戶默認vhost的全部操作權限
 
$ sudo rabbitmqctl set_permissions -p / username ".*" ".*" ".*"

#查看用戶的權限
 
$ sudo rabbitmqctl list_user_permissions username

開啟遠程訪問

默認情況下,RabbitMQ的默認的guest用戶只允許本機訪問, 如果想讓guest用戶能夠遠程訪問的話,只需要將配置文件中的loopback_users列表置為空即可,如下:

{loopback_users, []}

另外關于新添加的用戶,直接就可以從遠程訪問的,如果想讓新添加的用戶只能本地訪問,可以將用戶名添加到上面的列表, 如只允許admin用戶本機訪問。

{loopback_users, ["admin"]}

更新配置后,重啟服務.

###springboot2.0集成rabbitmq

pom引入start依賴:

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

application.properties配置:

#rabbitmq config begin
# rabbitmq服務器地址 (默認為127.0.0.1)
spring.rabbitmq.host=127.0.0.1
# rabbitmq服務器連接端口 (默認為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 {
 
  /**
   * 消費者數量,默認10
   */
  public static final int DEFAULT_CONCURRENT = 10;
 
  /**
   * 每個消費者獲取最大投遞數量 默認50
   */
  public static final int DEFAULT_PREFETCH_COUNT = 50;
 
 
  /**
   * 注入 Queue
   * @return
   */
  @Bean
  public Queue Queue() {
    return new Queue("hello");
  }
 
 
  /**
   * 并發消費配置
   * @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;
  } 
}

發送消息:

/**
 * 注入AmqpTemplate
 */
@Autowired
private AmqpTemplate rabbitTemplate;

 

public void sendMessage(){
  //發送消息
  this.rabbitTemplate.convertAndSend("hello","你好,rabbitmq");
}

convertAndSend方法的第一個參數為QueueName,第二個參數為消息的內容

接收消息:

/**
   * 消息接受
   * @param message
   */
  @RabbitListener(queues = "hello") //監聽器監聽指定的QueueName
  public void receive(String message) {
    System.out.println("接收消息:" + message);
  }

并發消費:

sendMessage() 發送消息后,receive() 接受消息,此時receive()接受消息,等待處理完成后,下一個消息才能進入receive(),如果想要消息異步消費,還需配置并發消費:

/**
   * 消息接受 并發消費
   * @param message
   */
  @RabbitListener(queues = "hello",containerFactory = "pointTaskContainerFactory")
  public void receive(String message) {
    System.out.println("接收消息:" + message);
  }

@RabbitListener注解中的containerFactory 是RabbitConfig配置的pointTaskContainerFactory,可以自定義如下參數:

/**
   * 消費者數量,默認10
   */
  public static final int DEFAULT_CONCURRENT = 10;
 
  /**
   * 每個消費者獲取最大投遞數量 默認50
   */
  public static final int DEFAULT_PREFETCH_COUNT = 50;

關于rabbitmq如何在springboot2.0中使用問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女