如何在idea使用RabbitMQ

news2024/11/18 23:48:50

一.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 

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2184031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】Uvicorn:Python 异步 ASGI 服务器详解

Uvicorn 是一个为 Python 设计的 ASGI&#xff08;异步服务器网关接口&#xff09;Web 服务器。它填补了 Python 在异步框架中缺乏一个最小化低层次服务器/应用接口的空白。Uvicorn 支持 HTTP/1.1 和 WebSockets&#xff0c;是构建现代异步Web应用的强大工具。 ⭕️宇宙起点 &a…

C++网络编程之IP地址和端口

概述 IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备&#xff0c;而端口则确保在目标设备上数据被交付到正确的应用或服务。因此&#xff0c;在网络编程中&#xff0c;IP地址和端口是密不可分的两个概念&#xff0c;共同构成了网络…

Why RTSP?RTSP播放器优势探究

RTSP优势探究 好多开发者搞不清楚&#xff0c;低延迟的传输&#xff0c;到底是走RTMP、WebRTC还是RTSP&#xff1f;如果走RTSP&#xff0c;RTSP播放器的优势有哪些&#xff1f;能否达到期望的延迟&#xff1f;答案是肯定的&#xff0c;废话不多说&#xff0c;上效果图&#xf…

Power apps:一次提交多项申请

1、添加一个Form&#xff0c;导入sharepoint列表&#xff0c;添加确认&#xff0c;继续&#xff0c;取消按钮 2、在页面的onvisible属性中添加 Set(applynumber,Last(付款申请表).申请编号1); #定义一个申请编号变量&#xff0c;每次申请&#xff0c;就将列表最后一个…

医疗陪诊APP开发实战:从互联网医院系统源码开始

本文将从互联网医院系统源码出发&#xff0c;深入探讨医疗陪诊APP的开发实战。 一、从互联网医院系统源码入手 开发医疗陪诊APP的基础在于互联网医院系统的源码。互联网医院系统通常包括以下几个模块&#xff1a; 1.用户管理&#xff1a;用户注册、登录、信息管理等功能。 …

C++继承的三种方式[ACCESS]

C继承的定义 两个类的继承关系在派生类中声明&#xff0c;派生类定义使用以下语法&#xff1a; class DerivedClass: [ACCESS] BaseClass{ /…/ }; 冒号&#xff08;:&#xff09;后的[ACCESS]是继承的最高权限级别符&#xff0c;可以是以下三个值&#xff08;存取权限级别&am…

fpga系列 硬件(时序收敛):触发器建立时间(setuptime)

触发器 电平触发、边沿触发和脉冲触发是三种主要的触发形式。always (posedge clk or negedge rst_n) 是一个典型的 Verilog 语句&#xff0c;用于定义一个带复位的触发器。D触发器是一种基本的数字存储元件&#xff0c;主要用于数据存储和时序控制。 D触发器的建立时间和保持…

Zabbix自动发现SNMP主机

前言 利用Zabbix监控DELL R740主机硬件&#xff0c;监控通过自动发现主机&#xff0c;链接SNMP监控模板 一、配置自动发现 自动发现脚本 cat discovery_host.pyfrom os.path import abspath, dirname, join import json import sysreload(sys) sys.setdefaultencoding(utf-8…

【2024】前端学习笔记11-网页布局-弹性布局flex

学习笔记 网页布局弹性布局&#xff1a;flex案例&#xff1a;flex布局案例 网页布局 在页面布局中&#xff0c;display属性用于设置一个元素的显示方式。它可以指定元素是作为块级元素、内联元素还是充当表格元素显示。 display的常见属性值&#xff1a; block&#xff1a;将…

前端——Ajax和jQuery

一、Ajax Ajax即“Asynchronous Javascript And XML”&#xff08;异步 JavaScript 和 XML&#xff09;&#xff0c; 通过 JS 异步的向服务器发送请 求并接收响应数据。 同步访问&#xff1a;当客户端向服务器发送请求时&#xff0c;服务器在处理的过程中&#xff0c;浏览器…

AutoGen实现多代理-Planning_and_Stock_Report_Generation(六)

1. 案例背景 本节内容是构建Agent组&#xff0c;通过广播模式&#xff0c;实现管理者对agent工作流的管理。本实验链接&#xff1a;传送门 2. 代码实践 2.1 环境设置 llm_config{"model": "gpt-4-turbo"}# 工作任务描述 task "Write a blogpost a…

【CSS3】css开篇基础(1)

1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; Hello, Hello~ 亲爱的朋友们&#x1f44b;&#x1f44b;&#xff0c;这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章&#xff0c;请别吝啬你的点赞❤️❤️和收藏&#x1f4d6;&#x1f4d6;。如果你对我的…

【树莓派系列】树莓派首次开机配置

树莓派首次开机配置 文章目录 树莓派首次开机配置1.镜像烧录2.开启串口调试1.无屏幕2.有屏幕3.串口登录系统 3.配置网络VNC与SSH的区别 4.更新vim5.固定IP地址6.开启SSH&#xff0c;网络登录开发板7.xrdp图形化登录开发板XRDP与VNC区别8.更新国内下载镜像源9.vscode连接开发板1…

C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点

题目&#xff1a; 题解&#xff1a; struct TreeNode* deleteNode(struct TreeNode* root, int key){struct TreeNode *cur root, *curParent NULL;while (cur && cur->val ! key) {curParent cur;if (cur->val > key) {cur cur->left;} else {cur c…

OpenAi FunctionCalling 案例详解

源码详细讲解 pdf 及教学视频下载链接&#xff1a;点击这里下载 FunctionCalling的单一函数调用 天气预报查询&#xff08;今天长沙的天气如何&#xff1f;&#xff09; import json import requests from openai import OpenAIclient OpenAI()location "长沙"…

`git restore` 和 `git checkout` 用于丢弃工作区的改动, `git switch` 和 `git checkout` 用来切换分支

git restore 和 git checkout 都可以用于丢弃工作区的改动 但它们有一些区别&#xff0c;尤其是在 Git 2.23 引入了新的命令后。 主要区别 git checkout 是一个多用途命令&#xff1a; 它用于切换分支。它还可以用于恢复工作区中特定文件的更改。由于功能过于复杂&#xff0c…

Cortex微控制器软件接口标准(CMSIS)

Cortex微控制器软件接口标准 目前&#xff0c;软件开发已经是嵌入式系统行业公认的主要开发成本&#xff0c;通过将所有Cortex-M芯片供应商产品的软件接口标准化&#xff0c;能有效降低这一成本&#xff0c;尤其是进行新产品开发或者将现有项目或软件移植到基于不同厂商MCU的产…

Golang | Leetcode Golang题解之第450题删除二叉搜索树的节点

题目&#xff1a; 题解&#xff1a; func deleteNode(root *TreeNode, key int) *TreeNode {var cur, curParent *TreeNode root, nilfor cur ! nil && cur.Val ! key {curParent curif cur.Val > key {cur cur.Left} else {cur cur.Right}}if cur nil {retur…

回首往事,感受change

今早&#xff0c;我收到了CSDN发来的消息&#xff0c;当我看了内容才发现&#xff0c;我不知不觉已经在CSDN里面创作了730天&#xff08;2年&#xff09;也是个非常值得纪念的日子。 今天&#xff0c;我来回顾一下我的以往&#xff0c;感受一下我的成长与变化。 梦的开始 大家…

【Python报错已解决】 Failed building wheel for opencv-python-headless

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…