好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

springboot2.0集成rabbitmq的示例代码

安装 rabbitmq

简介: rabbitmq即一个消息队列,主要用来实现应用程序的异步和解耦,消息缓冲,消息分发的作用.

由于rabbitmq依赖于erlang语言,所以先安装erlang:

添加erlang solutions源

?

1

2

3

$ wget https: //packages.erlang-solutions测试数据/erlang-solutions-1.0-1.noarch.rpm

$ sudo rpm -uvh erlang-solutions- 1.0 - 1 .noarch.rpm

$ sudo yum install erlang

erlang完成后安装rabbitmq:

先下载rpm:

?

1

wget http: //HdhCmsTestrabbitmq测试数据/releases/rabbitmq-server/v3.6.6/rabbitmq-server-3.6.6-1.el7.noarch.rpm

下载完成后安装:

?

1

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)

可以尝试先执行

?

1

$ sudo yum install socat

rabbitmq的基本操作:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

$ 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列表置为空即可,如下:

?

1

{loopback_users, []}

另外关于新添加的用户,直接就可以从远程访问的,如果想让新添加的用户只能本地访问,可以将用户名添加到上面的列表, 如只允许admin用户本机访问。

?

1

{loopback_users, [ "admin" ]}

更新配置后,重启服务.

### springboot 2.0集成rabbitmq

pom引入start依赖:

?

1

2

3

4

<dependency>

   <groupid>org.springframework.boot</groupid>

   <artifactid>spring-boot-starter-amqp</artifactid>

</dependency>

application.properties配置:

?

1

2

3

4

5

6

7

8

#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配置:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

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;

   }

}

发送消息:

?

1

2

3

4

5

6

7

8

9

10

11

12

/**

  * 注入amqptemplate

  */

@autowired

private amqptemplate rabbittemplate;

 

 

 

public void sendmessage(){

   //发送消息

   this .rabbittemplate.convertandsend( "hello" , "你好,rabbitmq" );

}

convertandsend方法的第一个参数为queuename,第二个参数为消息的内容

接收消息:

?

1

2

3

4

5

6

7

8

/**

    * 消息接受

    * @param message

    */

   @rabbitlistener (queues = "hello" ) //监听器监听指定的queuename

   public void receive(string message) {

     system.out.println( "接收消息:" + message);

   }

并发消费:

sendmessage() 发送消息后,receive() 接受消息,此时receive()接受消息,等待处理完成后,下一个消息才能进入receive(),如果想要消息异步消费,还需配置并发消费:

?

1

2

3

4

5

6

7

8

/**

    * 消息接受 并发消费

    * @param message

    */

   @rabbitlistener (queues = "hello" ,containerfactory = "pointtaskcontainerfactory" )

   public void receive(string message) {

     system.out.println( "接收消息:" + message);

   }

@rabbitlistener注解中的containerfactory 是rabbitconfig配置的pointtaskcontainerfactory,可以自定义如下参数:

?

1

2

3

4

5

6

7

8

9

/**

    * 消费者数量,默认10

    */

   public static final int default_concurrent = 10 ;

 

   /**

    * 每个消费者获取最大投递数量 默认50

    */

   public static final int default_prefetch_count = 50 ;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

原文链接:https://juejin.im/post/5c0273b06fb9a049f06a0021

查看更多关于springboot2.0集成rabbitmq的示例代码的详细内容...

  阅读:15次