JAVA发送消息到RabbitMq

news2024/11/27 22:39:13

项目中,作为生产者自定义消息发送到RabbitMq。

1.引入rmq依赖

     <!-- rabbitmq 依赖 -->
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.9.0</version>
        </dependency>

2.创建链接、断开连接工具类。

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;

/**
 * RabbitMq 工具类
 *
 * @author Klay
 * @date 2023/6/25
 */
public class RabbitmqUtils {
    private static Channel channel = null;
    private static Connection connection = null;

    /**
     * 获取连接
     *
     * @author hukelei
     * @date 2023/6/25 10:37
     */
    public static Channel getChannel() {
        //定义连接池
        ConnectionFactory factory = new ConnectionFactory();
        //设置主机地址
        factory.setHost("127.0.0.1");
        //设置端口
        factory.setPort(5672);
        //设置用户名
        factory.setUsername("guest");
        //密码
        factory.setPassword("guest");
        //虚拟机路径
        factory.setVirtualHost("/");
        try {
            connection = factory.newConnection();
            //创建信道
            channel = connection.createChannel();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }
        return channel;
    }

    /**
     * 关闭连接
     *
     * @author hukelei
     * @date 2023/6/25 10:37
     */
    public static void closeConnection() {
        try {
            channel.close();
            connection.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        }

    }
}

3.发送消息。大部分业务应用场景中,只需要发送消息到指定的交换机(exchange)中。如果业务需要创建交换机,则将注释的代码打开,创建交换机、队列,并绑定。发送消息时,将对应的交换机、路由进行替换即可。


import com.hikvision.ardatatormq.utils.RabbitmqUtils;
import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import java.io.IOException;

/**
 * @author Klay
 * @date 2023/10/16 016
 */
@Slf4j
public class SendMessageTest {
    public static void main(String[] args){
        //利用写好工具类获取信道连接
        Channel channel = RabbitmqUtils.getChannel();
        try {
            /**
             *创建一个交换机
             *1.交换机名称
             *2.交换机类型有fanout,direct,topic,headers
             *3.是否持久化
             *4.设置是自动删除,当没有队列与当前交换机绑定时自动删除
             *5.设置是否内置,表示内置的交换机
             *6.设置其他的一些结构化参数
             */
//            channel.exchangeDeclare("text_pubsub", BuiltinExchangeType.FANOUT, false, false, false, null);
            /**
             *1.队列名称
             *2.是否持久化,持久化会存盘,重启也还存在
             *3.exclusive 是否排他如果一个队列被声明为排他的队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除这里需要注意三点:排他的队列是基于连接(Connection)可见的,同一个连接的不同信道(Channel)是可以同时访问同一连接创建的排他队列;“首次”是指如果一个连接已经声明了一个排他队列,其它连接是不允许建立同名的排他队列的,这个与普通队列不同;即使该队列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除,这种队列适用于一个客户端同时发送和读取消息的应用场景。
             *4.是否自动删除至少有一个消费者连接到这个队列,之后所有与这个队列连接的消费者都断开时,才会自动删除
             *5.设置队列的其他配置参数
             */
//            channel.queueDeclare("pubsub_queue1", false, false, false, null);
            /**
             *将交换机与队列绑定
             *1.队列名称
             *2.交换机名称
             *3.routerkey(路由key)
             *4.其他的绑定参数
             */
//            channel.queueBind("pubsub_queue1", "text_pubsub", "routingKeyTest");

            /**
             *发送消息
             *1.交换机名称
             *2.routerkey路由key,目前没有指定双引号即可
             *3.无额外配置写null
             *4.消息体
             */
            String msg = "发布订阅模式!!!";
            channel.basicPublish("amq.topic", "routingKeyTest", null, msg.getBytes());
            log.info("消息发送成功!:{}", msg);
        } catch (IOException e) {
            log.error("发送消息IOException:{}", e);
        } finally {
            //关闭连接
            RabbitmqUtils.closeConnection();
        }

    }
}

4.进行测试。

        4.1为交换机amq.topic创建一个测试队列并绑定。

     4.2发送消息

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

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

相关文章

Leetcode刷题解析——最大连续1的个数

1. 题目链接&#xff1a;1004. 最大连续1的个数 III 2. 题目描述&#xff1a; 给定一个二进制数组 nums 和一个整数 k&#xff0c;如果可以翻转最多 k 个 0 &#xff0c;则返回 数组中连续 1 的最大个数 。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1,0,0,0,1,1,1,1,0]…

【MySql系列】深入解析数据库索引

写在前面 MySQL索引是数据库中一个关键的概念&#xff0c;它可以极大地提高查询性能&#xff0c;加快数据检索速度。但是&#xff0c;要充分发挥索引的作用&#xff0c;需要深入理解它们的工作原理和使用方式。 在本文中&#xff0c;我们将深入解析MySQL索引&#xff0c;探讨它…

PyCharm安装和使用教程

简介 PyCharm是一种PythonIDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单…

护眼灯色温多少最好?儿童护眼灯色温范围多少

如果不想家里的孩子年纪小小的就戴着眼镜&#xff0c;从小就容易近视&#xff0c;那么护眼灯的选择就非常重要了&#xff0c;但是市场上那么多品类&#xff0c;价格也参差不齐&#xff0c;到底怎么选呢&#xff1f;色温该是多少呢&#xff1f;为大家推荐五款色温完全没问题的护…

【特纳斯电子】JDY-10M模块

视频及资料链接&#xff1a;JDY-10M模块 - 电子校园网 (mcude.com) 一、实物图 二、原理图 引脚定义 内部引脚图 三、简介 JDY-10 透传模块是基于蓝牙 4.0 协议标准&#xff0c;工作频段为 2.4GHZ 范围&#xff0c;调制方式为 GFSK(高斯频移键控&#xff0c;在调制之前通过一…

人形机器人:未来与现实的交汇

原创 | 文 BFT机器人 人形机器人是一种模仿人类外形和动作的机器人&#xff0c;具有复杂的机械结构和智能控制系统。随着科技的不断进步和应用领域的扩大&#xff0c;人形机器人行业正逐渐崭露头角&#xff0c;成为一个具有巨大潜力的新兴产业。根据高盛的预测&#xff0c;到2…

存档&改造【07】多表查询和可操控对象的存储

前情摘要 在可操作对象一栏中&#xff0c;默认IS_ALL所有人可见&#xff0c;还可以指定用户和部门&#xff0c;可操作对象存在CODE_SYSTEM_OPERATION&#xff08;晶码-接入系统操作项&#xff09;表中&#xff0c;部门/用户ID&NAME存在CODE_SYSTEM_OPERATION_AUTH&#xf…

Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?

你是否曾经想过&#xff0c;当你在 Intellij IDEA 中输入一个段代码时&#xff0c;GitHub 是如何给你返回相关的结果的&#xff1f;其实&#xff0c;这背后的秘密就是围绕 Prompt 生成而构建的架构设计。 Prompt 是一个输入的文本段落或短语&#xff0c;用于引导 AI 生成模型执…

《数字图像处理-OpenCV/Python》连载(22)绘制直线与线段

《数字图像处理-OpenCV/Python》连载&#xff08;22&#xff09;绘制直线与线段 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第 4 章 绘图与鼠标交互 本章介…

Http/https代理和抓包分析

前言 最近工作需要部署http/https的代理&#xff0c;所以用squid部署了一下&#xff0c;重新回顾了一下http和https的代理知识。 HTTP代理 根据《HTTP 权威指南》如图&#xff1a; 这种情况下&#xff0c;对访问服务器而言&#xff0c;它会把代理当做客户端&#xff0c;完全…

C++算法:前缀和基础

相关 源码测试用例下载 https://download.csdn.net/download/he_zhidan/88430716 包括4个压缩包&#xff0c;初始代码&#xff0c;实现前缀和&#xff0c;实现前缀积&#xff0c;实现前缀异或。都是在前者的基础上修改的。 本博文是CSDN学院课程的讲义 https://edu.csdn.net/c…

【linux kernel】linux的platform设备驱动框架分析

文章目录 一、简介二、platform总线三、platform设备和驱动的匹配过程四、platrom驱动和platform设备五、platform驱动设计六、代码示例 &#x1f53a;【linux内核系列文章】 &#x1f449;对一些文章内容进行了勘误&#xff0c;本系列文章长期不定时更新&#xff0c;希望能分享…

可视化上证50结构图

可视化上证50结构图 缘由收集数据先获取50支成分股列表获取各成分股票K线数据 数据处理找出来&#xff0c;再删除&#xff0c;然后重新下载数据最终获得每日报价的变化值 图形结构处理聚类分析使用affinity_propagation(亲和传播)聚类 嵌入二维平面空间可视化小结热力图 缘由 …

Excel和图片如何互相转换?有何技巧?

一、将图片转为excel表格 首先&#xff0c;打开金鸣识别网站&#xff0c;点击“点击添加需转换的图片或PDF”按钮&#xff0c;添加待识别的图片或PDF文件。 添加完待识别的图片或PDF后&#xff0c;点击“提交识别”按钮&#xff0c;程序便开始识别。 识别完成后&#xff0c;系…

无效的 page.json [“window“] 页面.json配置了“window“: {“disableScroll“: true}

问题&#xff1a;启动小程序时报错 无效的 page.json ["window"] 页面 解决&#xff1a; app.json 全局配置才使用window对象&#xff0c;在单独的页面直接写disableScroll:true即可 //app.json中添加&#xff0c;window里面添加就可以了 "window": { …

儿童写作业用的护眼灯哪种好?双十一写作业护眼灯推荐

这些年大家对于身体健康越来越重视&#xff0c;尤其是关于儿童青少年的眼睛健康问题&#xff0c;因此作为学生们常用的护眼台灯也成为了非常多家长为孩子选择的学习台灯。而还没给孩子准备台灯的家长们也都想买上一盏台灯给孩子使用&#xff0c;但市面上的护眼台灯太多了&#…

【ElasticSearch】学习笔记

【ElasticSearch】学习笔记 【一】ElasticSearch是什么&#xff1f;【二】Mac安装ElasticSearch【三】Mac安装可视化界面Kibana 【一】ElasticSearch是什么&#xff1f; ElasticSearch是一个分布式、Restful风格的搜索和数据分析引擎&#xff0c;Stark的核心。 可以应用在比如…

XnViewMP forMac/Windows中文版:轻松管理和浏览您的图片库

您是否厌倦了使用不方便、功能有限的图片浏览软件&#xff1f;现在&#xff0c;让我向您介绍一款强大而全面的图片浏览软件——XnViewMP&#xff01; XnViewMP是一款免费开源的跨平台图片浏览软件&#xff0c;它具有出色的功能和易用性&#xff0c;适用于个人用户和专业摄影师…

助力森林火情预警检测,基于YOLOv7-tiny、YOLOv7和YOLOv7x开发构建无人机航拍场景下的森林火情检测是别预警系统

火情的预警与检测识别对于保障林业安全&#xff0c;减少人员伤亡有着重要的意义&#xff0c;科学有效地早发现早扑灭是最有效的干预手段&#xff0c;本文的主要是想就是想要建立基于无人机航拍场景下的森林火情检测预警系统&#xff0c;整体效果如下所示&#xff1a; 这里文中选…