如何在idea使用RabbitMQ

news/2024/10/2 7:20:12 标签: java, 开发语言, 微服务, linux, 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

java"> 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。

java">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访问的端口。

java">spring:
  rabbitmq:
    host: 192.168.58.39
    port: 5672
    username: guest
    password: guest

5.创建一个test测试类

6.创建一个配置类

java">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 写入下面的代码

java">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 写入下面的代码

java">@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 中添加以下代码

java">/**
 * 目的地名字(就是队列的名字)
 * 绑定类型,交换机或队列
 * 交换机名称
 * 路由键
 * 参数(很少使用)
 */
@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.发送基本数据类型

java"> @Autowired
    private RabbitTemplate rabbitTemplate; 

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

测试:

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

上面不是常用的发送方式

2.发送对象

我们来发送对象。

2.1创建一个实体类

java">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 测试类中

java">/**
     * 交换机名称
     * 路由键
     * 对象
     */
    @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 类

java">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 

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


http://www.niftyadmin.cn/n/5688144.html

相关文章

企业数据挖掘工具选择指南:如何找到最适合的工具

一、引言 在信息爆炸的时代&#xff0c;数据已经成为企业的重要资产。 数据挖掘&#xff0c;作为一种从大量数据中提取有价值信息的技术&#xff0c;对于企业决策、市场分析、风险 管理等方面具有不可估量的作用。 1. 数据挖掘的重要性 支持决策制定&#xff1a;数据挖掘能够…

如何用JavaScript编写一个简单的计数器

在网页开发中&#xff0c;计数器是一种常见的功能&#xff0c;它可以帮助我们记录点击次数、显示时间等。下面我将介绍如何在HTML页面中使用JavaScript实现一个基本的计数器。如图&#xff1a; 1、 创建HTML结构 首先&#xff0c;我们需要创建一个基础的HTML结构来容纳我们的计…

C++11_左值引用与右值引用

在C11之前&#xff0c;是没有右值引用的概念的&#xff0c;在C11之后才新增了右值引用。其实无论是左值引用还是右值引用都是给对象取别名。 认识左值和右值 什么是左值&#xff1f; 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可…

使用 Docker 制作 YashanDB 镜像:深度解析与实战指南

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…

Android中级控件

文章目录 图形定制1.图形Drawable2.形状图像3.九宫格图片4.状态列表图形 选择按钮1.复选框CheckBox2.开关按钮Switch3.单选按钮 文本输入1.编辑框EditText2.焦点变更监听器3.文本变化监听器 对话框1.提醒对话框2.日期对话框DatePickerDialog3.时间对话框TimePickerDialog 图形定…

复习HTML(基础)

目录 HTML含义 HTML作用 HTML的常用元素 元素的特点 元素的分类 1 是否嵌套关系 2 是否独占一行 块元素&#xff1a;独占一行 行内元素&#xff1a;共享一行 行内元素与块级元素的转换 3是否有结束标签 常用标签 1 标题标签&#xff1a;有六级 我们用h1 ~h6 表…

Qt 中的模型/视图架构:控件与数据模型的关系

Qt 提供了一个强大的 模型/视图架构&#xff08;Model/View Architecture&#xff09;&#xff0c;用于将数据的存储与展示分离开来。这种架构不仅能让数据与用户界面的表现独立&#xff0c;还提供了高度的灵活性和可复用性。本文将详细介绍 Qt 中控件&#xff08;视图&#xf…

PDF阅读器工具集萃:满足你的多样需求

现在阅读书籍大部分都喜欢电子书的形式了吧&#xff0c;因为小小的一个设备就能存下上万本书。从流传程度来说PDF无疑是一个使用最广的格式。除了福昕PDF阅读器阅读之外还有哪些好用的阅读工具呢/&#xff1f;今天我们一起来探讨一下吧。 1.福昕阅读器 链接一下>>www.f…