rabbitmq

linux安装rabbitmq

安装rabbitmq需要安装erlang,在对应官网分别下载对应源码文件

rabbitmq 下载页面http://www.rabbitmq.com/download.html 下载RHEL/CentOS 6.x

erlang 下载页面http://www.erlang.org/downloads 下载OTP 21.0 Source File

安装erlang与对应依赖

  1. yum install ncurses-devel

  2. 解压erlang的gz文件 tar xf otp_src_*

  3. 进入解压后目录 cd otp_src_*

  4. 执行./configure –prefix=/usr/local/erlang20 –without-javac

  5. 编译 make -j 4 根据核数而定这个数字 若不确定可写1

  6. 安装 make install

  7. 检查erlang是否安装成功 进入对应目录 cd /usr/local/erlang20 -> cd bin -> ./erl 判断是否进入Eshell 若进入则安装成功

安装rabbitmq

  1. 安装依赖 yum install python -y -> yum install xmlto -y -> yum install python-simplejson -y

  2. rpm -ivh rabbitmq-server-*.rpm

  3. 顺便提下 linux安装包的卸载命令

    1
    2
    3
    4
    5
    6
    7
     rpm -qa | grep 包名 

    这个命令是为了把包名相关的包都列出来

    rpm -e 文件名

    这个命令就是你想卸载的软件,后面是包名称,最后的版本号是不用打的

  4. 安装包的卸载命令详细可查看

配置账号信息

  1. rabbitmqctl list_users 查看当前账号列表
  2. rabbitmqctl add_user admin admin 添加账号 前面是户名后面是密码
  3. rabbitmqctl set_user_tags admin administrator 设置账号权限
  4. rabbitmqctl set_permissions -p “/“ admin “.*“ “.“ “. 设置账号可以远程访问

rabbitmq启动

  1. service rabbitmq-server start    启动

 2. service rabbitmq-server stop    停止

 3. service rabbitmq-server restart   重启

启动rabbitmq内置web插件

rabbitmq-plugins enable rabbitmq_management

 访问 http://你的地址:15672/#/users

springboot使用rabbitmq

依赖引入

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

配置文件

1
2
3
4
5
6
spring: 
rabbitmq:
host: 118.89.34.60 ip地址
port: 5672 端口号
username: wugui 用户名
password: 15213497317 密码

请它属性可查看文档

发送消息

1
2
3
4
5
6
7
8
@Component
public class HelloSend {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send(String msg){
rabbitTemplate.convertAndSend("hello",msg); // 注意 hello msg可以是一个任意Object
}
}

接收消息

1
2
3
4
5
6
7
8
@Component
@RabbitListener(queues = "hello") //注意 hello
public class HelloReceiver {
@RabbitHandler
public void receiver(String msg){
System.out.println("我接收的" + msg);
}
}

可以将@RabbitListener注解在方法上或者类上 如果注解在方法上则方法体上则不需要@RabbitHandler注解并且一个类可以监听多个队列

注意hello该字符为消息队列名,发送则与接收则需要统一并且消息队列名需要添加在rabbitmq中 可在http://你的地址:15672/#/users 中添加

配置队列

如果不在rabbitmq中添加则可以写如下配置类 将会在rabbitmq中添加消息队列

1
2
3
4
5
6
7
@Configuration
public class RabbitConfig {
@Bean
public Queue qryQueue(){
return new Queue("hello");
}
}

一个消息队列的发送则与接收则可以有多个,消息堆积时接收则均分消息

订阅模式

配置类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
final static String one = "topic.rr";
final static String two = "topic.qw";
@Bean
public Queue queueOne() { // 配置队列一
return new Queue(RabbitConfig.one);
}
@Bean
public Queue queueTwo() { //配置队列二
return new Queue(RabbitConfig.two);
}
@Bean
TopicExchange exchange() { // 配置交换机
return new TopicExchange("exchange");
}
// 将队列一绑定与交换机并且指定接收消息队列
@Bean
Binding bindingExchangeMessage(Queue queueOne, TopicExchange exchange) {
return BindingBuilder.bind(queueOne).to(exchange).with("topic.rr");
}
// 将队列二绑定与交换机并且指定接收交换机下面所有的topic.#系列的消息
@Bean
Binding bindingExchangeMessages(Queue queueTwo, TopicExchange exchange) {
return BindingBuilder.bind(queueTwo).to(exchange).with("topic.#");
}

发送消息

1
2
3
4
5
6
public void sendo(String msg){
rabbitTemplate.convertAndSend("exchange","topic.rr",msg);
}
public void sendt(String msg){
rabbitTemplate.convertAndSend("exchange","topic.qw",msg);
}

接收消息

1
2
3
4
5
6
7
8
@RabbitListener(queues = "topic.rr")
public void receivero(String msg){
System.out.println("2" + msg);
}
@RabbitListener(queues = "topic.qw")
public void receivert(String msg){
System.out.println("3" + msg);
}

当发送sendo()时 消息监听topic.rr与topic.qw都将会接收到消息 发送的为topic.rr将匹配到队列一与队列二

当发送sendt()时 消息监听topic.qw将会接收到消息 因为交换机将topic.qw绑定与topic.#上,这里的#将匹配零个或多个词 若为*表示一个词

广播模式

配置类

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
@Configuration
public class FanoutRabbitComfig {
private final static String faouta = "a";
private final static String faoutb = "b";
private final static String faoutc = "c";
@Bean
public Queue qrya(){
return new Queue("a");
}
@Bean
public Queue qryb(){
return new Queue("b");
}
@Bean
public Queue qryc(){
return new Queue("c");
}
@Bean
public FanoutExchange cre(){
return new FanoutExchange("broadcast");
}
@Bean
public Binding bindExchangeA(Queue qrya,FanoutExchange fanoutExchange){
return BindingBuilder.bind(qrya).to(fanoutExchange);
}
@Bean
public Binding bindExchangeB(Queue qryb,FanoutExchange fanoutExchange){
return BindingBuilder.bind(qryb).to(fanoutExchange);
}
@Bean
public Binding bindExchangeC(Queue qryc,FanoutExchange fanoutExchange){
return BindingBuilder.bind(qryc).to(fanoutExchange);
}
}

发送广播消息

1
2
3
public void sendBroadcast(String msg){
rabbitTemplate.convertAndSend("broadcast","",msg);
}

发送如上广播消息后 则交换机broadcast内所有的监听器都能接收到对应消息

文章目录
  1. 1. linux安装rabbitmq
    1. 1.1. 安装erlang与对应依赖
    2. 1.2. 安装rabbitmq
    3. 1.3. 配置账号信息
    4. 1.4. rabbitmq启动
    5. 1.5. 启动rabbitmq内置web插件
  2. 2. springboot使用rabbitmq
    1. 2.1. 依赖引入
    2. 2.2. 配置文件
    3. 2.3. 发送消息
    4. 2.4. 接收消息
    5. 2.5. 配置队列
    6. 2.6. 订阅模式
    7. 2.7. 广播模式
,