如何在idea使用RabbitMQ

一.RabbitMQ的安装和访问

1.在linux虚拟机安装RabbitMQ

docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:3.9.9-management

 2.启动RabbitMQ

 docker start rabbitmq

 

3.访问 RabbitMQ网页

在自己的浏览器运行http://192.168.130.39:15672/ (192.168.130.39是自己的虚拟机的ip,其他不变。)本机web访问是15672,idea项目访问时5672

rabbitMq没有开机自启动,如果每次退出虚拟机后再进入,需要重新启动它

登陆到首页,默认用户名和默认密码都是guest

4.创建新用户(创建虚拟主机)

然后我们来创建一个新用户(创建虚拟主机)

还要点右边的Admin,然后左下角添加,username和密码随便取

设置admin用户的虚拟主机,/ 表示所有。

状态改变了

二.创建idea的maven项目

1.建立新的maven项目

 2.在pom.xml添加依赖

然后我们再来到你要进行操作的项目,然后在它的pom.xml里添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
            <version>2.1.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.1.10.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.34</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

3.创建启动类并添加注解

然后在你的自己建立的启动类里添加@EnableRabbit注解来启动RabbitMQ。

package com;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableRabbit
@SpringBootApplication
public class SpringBootMain {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMain.class,args);
    }
}

4.修改application.yml

这个可以自己设置,

guest是游客账号,只能在本机访问

5672端口号是项目程序访问的端口,15672是web访问的端口。

spring:
  rabbitmq:
    host: 192.168.58.39
    port: 5672
    username: guest
    password: guest

5.创建一个test测试类

6.创建一个配置类

package com.jr.config;

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyMqConfig {

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

}

二.创建交换机

队列是用来存放消息的。队列可手动(写代码)或者自动创建。

1. 页面创建(不常用)

name自己取,只要不冲突就行。

回去看多了一个自己命名的交换机,说明创建成功。

2.代码创建(常用)

在你之前创建的test测试类RabbitMqTest 写入下面的代码

package com.jr.test;

import com.SpringBootMain;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@SpringBootTest(classes = SpringBootMain.class) //SpringBootMain 是SpringBoot项目的启动类
@Slf4j
@SuppressWarnings("all")
@RunWith(SpringRunner.class)  //SpringRunner 是依赖中的系统类,如果Test导的是junit包里,需要加@RunWith注解
public class RabbitMqTest {
    @Autowired
    private AmqpAdmin amqpAdmin;
    /**
     * String name:交换机名称
     * boolean durable:是否持久化
     * boolean autoDelete:是否自动删除
     */
    @Test
    public void createExchange() {
        String name = "helloworld";//交换机的名字
        boolean durable = true;//允许持久化
        boolean autoDelete = false;//不允许自动删除
        DirectExchange directExchange = new DirectExchange(name, durable, autoDelete);
        amqpAdmin.declareExchange(directExchange);
        log.info("create exchanges {}", "hello");//日志信息可写可不写
    }
}

 2.1启动createExchange方法

再去rabbitMQ网页,发现多了helloworld这个交换机,说明创建成功。

三.创建队列

1. 页面创建(不常用)

name自己取,只要不冲突就行

创建后的结果 

2. 代码创建(常用)

在你之前创建的test测试类RabbitMqTest 写入下面的代码

@Test
public void createQueue() {
    Queue queue = new Queue("helloworld-queue", true, false, false);
    String queueName = amqpAdmin.declareQueue(queue);
    log.info("创建队列成功 {}", queueName);
}

2.1启动createQueue方法

再去rabbitMQ网页、发现多了helloworld-queue这个队列,说明创建成功。

四.交换机与队列绑定

将交换机和队列建立关系。也分为页面绑定和代码绑定

1.页面创建(不常用)

点击进入一个交换机。

TO queue 是你要绑定的队列,routing key 随便命名

绑定后会出现下面这个图 

2.代码绑定(常用)

在上面创建的test测试类RabbitMqTest 中添加以下代码

/**
 * 目的地名字(就是队列的名字)
 * 绑定类型,交换机或队列
 * 交换机名称
 * 路由键
 * 参数(很少使用)
 */
@Test
public void createBinding() {
    Binding binding = new Binding("helloworld-queue", Binding.DestinationType.QUEUE, "helloworld", "helloworld.queue", null);
    amqpAdmin.declareBinding(binding);
    log.info("创建绑定成功 {}", "helloworld.queue");
}

启动测试:

再去rabbitMQ网页查看

 五.发送消息

1.发送基本数据类型

 @Autowired
    private RabbitTemplate rabbitTemplate; 

    /**
     * 交换机名称
     * 路由键
     * 内容
     */
    @Test
    public void sendMessage(){
        rabbitTemplate.convertAndSend("helloworld", "helloworld.queue", "hello world !");
    }

测试:

Messages那的数字1是查看前几条信息

上面不是常用的发送方式

2.发送对象

我们来发送对象。

2.1创建一个实体类

package com.jr.entry;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Emp {
    private int empno;
    private String ename;

}

2.创建一个配置类 

2.2把下面的代码放入RabbitMqTest 测试类中

/**
     * 交换机名称
     * 路由键
     * 对象
     */
    @Test
    public void sendObject(){
        Emp emp=new Emp();
        emp.setEname("奥特曼");
        emp.setEmpno(123456);
        rabbitTemplate.convertAndSend("helloworld", "helloworld.queue", emp);
        log.info("兄弟我来了");
    }

2.3启动测试方法

去rabbitMQ网站去看看,准备中(Ready)的消息变成两个了,然后我们点击进入helloworld-queue 队列里

六.接受消息

1.创建一个RabbitMqListener 类

package com.jr.listener;

import com.jr.entry.Emp;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;


@Component
public class RabbitMqListener {

    @RabbitListener(queues = {"helloworld-queue"})
    public void getMessage(Message message, Emp emp) {
       
        System.out.println(emp);
        
        System.out.println(message);
        
        System.out.println(new String(message.getBody()));
       
    }
}

2.启动之前我们那个发送对象的测试方法 

这里看自己的控制台,收到了消息

然后再去rabbitMQ网站看看,之前准备的(Ready)的消息全没了。

再次get messages时也弹窗说queue is empty 

到此结束,希望能帮到大家

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值