Java代码连接RabbitMQ服务器

news2024/11/16 5:24:42

目录

1.添加依赖

2.生产者代码

3.消费者代码

4.效果

1.发送消息

2.消费消息

5.注意


1.添加依赖

    <dependency>
      <groupId>com.rabbitmq</groupId>
      <artifactId>amqp-client</artifactId>
      <version>5.12.0</version>
    </dependency>

2.生产者代码

public class Producer {

    public static void main(String[] args) throws IOException, TimeoutException {
        String exchangerName = "ex_exchanger_name";
        // 交换机名称
        String queueName = "ex_queue_name";
        // 队列名称
        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 创建连接工厂
        connectionFactory.setHost("ip地址");
        // RabbitMQ服务器地址(写自己服务器对应的ip地址)
        connectionFactory.setUsername("admin");
        // RabbitMQ用户名,这里是自定义用户名
        connectionFactory.setPassword("123456");
        // RabbitMQ密码,这里是自定义密码
        connectionFactory.setPort(5672);
        // RabbitMQ端口号

        Connection connection = connectionFactory.newConnection();
        //创建连接
        Channel channel = connection.createChannel();
        //创建信道

        /**
         * 创建交换机
         * 1、交换机名称
         * 2.交换机类型,direct,topic,fanout和header(这里选择direct)
         * 3.指定交换机是否需要持久化,如果设置为true,那么交换机的元数据要持久化
         * 4.指定交换机没有队列绑定时是否需要删除,设置为false表示不删除
         * 5.Map<String,Object>类型,用来指定我们交换机其它的一些结构化参数,我们在这里直接设置为null
         */
        channel.exchangeDeclare(exchangerName, BuiltinExchangeType.DIRECT,true,false,null);

        /**
         *生成一个队列
         * 1.队列名称
         * 2.队列是否需要持久化(只是队列名称持久化,而非队列中的消息)
         * 3.表示队列是否私有,只有创建他的应用程序才能消费消息
         * 4.队列在没有消费者订阅的情况下是否自动删除
         * 5.队列的一些结构化信息,比如声明死信队列,磁盘队列会用到
         */
        channel.queueDeclare(queueName,true,false,false,null);

        /**
         * 将我们的交换机和队列绑定
         * 1.队列名称
         * 2.交换机名称
         * 3.路由键,在我们直连模式下,可以为我们的队列名称
         */

        channel.queueBind(queueName,exchangerName,queueName);

        //发送消息
        String message = "hello rabbitmq";

        /**
         * 发送消息
         * 1.发送到哪个交换机
         * 2.队列名称
         * 3.其它参数信息
         * 4.发送消息的消息体
         */
        channel.basicPublish(exchangerName,queueName,null,message.getBytes());

        channel.close();//关闭信道
        connection.close();//关闭连接
    }

}

3.消费者代码

public class Consumer {

    public static void main(String[] args) throws IOException, TimeoutException {

        ConnectionFactory connectionFactory = new ConnectionFactory();
        // 创建连接工厂
        connectionFactory.setHost("ip地址");
        // RabbitMQ服务器地址(写自己服务器对应的ip地址)
        connectionFactory.setUsername("admin");
        // RabbitMQ用户名,这里是自定义用户名
        connectionFactory.setPassword("123456");
        // RabbitMQ密码,这里是自定义密码
        connectionFactory.setPort(5672);
        // RabbitMQ端口号


        Connection connection = connectionFactory.newConnection();
        //创建连接
        Channel channel = connection.createChannel();
        //创建信道

        DeliverCallback deliverCallback = (consumerTage,message) -> {

            System.out.println("接收到消息"+new String(message.getBody()));

        };

        CancelCallback cancelCallback = consumerTage-> {
            System.out.println("消息消费中断");
        };

        /**
         * 消费消息
         * 1.消费哪个队列
         * 2.消费成功后,是否需要自动应答,如果为true,则是自动应答
         * 3.接收消息的一个回调函数
         * 4.取消消息的回调函数
         */

        channel.basicConsume("ex_queue_name",true,deliverCallback,cancelCallback);

        channel.close();//关闭信道

        connection.close();//关闭连接

    }
}

4.效果

为了显示效果,这里需要登录RabbitMQ对应的web登录管理界面:

如果不知如何启动RabbitMQ服务或登录该管理界面,参考之前文章Rabbitmq的安装与使用(Linux版)icon-default.png?t=N6B9https://blog.csdn.net/Kristabo/article/details/131965339

1.发送消息

 启动Producer程序:

可以看到多了一个名称为:"ex_queue_name"的队列,同时多了一条未消费信息:

2.消费消息

启动Consumer程序

 运行后,可以接收到发送的消息内容:

同时在此检查队列情况:

可以发现名称为 "ex_queue_name"的队列中已没有未读消息

5.注意

这里用到的是direct类型的交换机,如果还需要其他类型交换机相关代码参考,可关注公众号【蜗牛变涡流】,回复rabbitMQ获取完整代码

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

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

相关文章

12、springboot自定义banner

springboot自定义banner ▲ 控制Banner信息是否显示及在哪里显示&#xff1a; 在application.properties这个配置文件里面进行以下的属性设置&#xff1a;spring.main.banner-mode 属性进行设置&#xff0c;该属性支持如下3个属性值&#xff1a;- console&#xff1a;在Spring…

JavaWeb+jsp+Tomcat的教务查询系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88134601?spm1001.2014.3001.5503 jsp/tomcat7.05/MySQL5.7或8版本/ssm框架/spring/ Web框架&#xff1a;SpringBoot/ORM框架&#xff1a;Mybatis/安全框架&#xff1a;Shiro/分页插件&am…

指针进阶详解---C语言

❤博主CSDN:啊苏要学习 ▶专栏分类&#xff1a;C语言◀ C语言的学习&#xff0c;是为我们今后学习其它语言打好基础&#xff0c;C生万物&#xff01; 开始我们的C语言之旅吧&#xff01;✈ 目录 前言&#xff1a; 一.字符指针 二.指针数组 三.数组指针 四.数组、指针参数 …

html富文本编辑器

接了个单子&#xff0c;需要添加一个文章模块&#xff0c;一看用到的技术这么老&#xff0c;人傻了&#xff0c;纯html css js 。 在普通页面中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"…

word xls有用小技巧

不少office、代码编辑等软件&#xff0c;很简单高效小技巧。Word xlsx 某一行或列不动&#xff1a; 视图》冻结窗格》冻结首行 eclispe 全局搜索 CtrlH 制定变量、名称搜索 鼠标左键点中CtrlAltG

Promethus(普罗米修斯)监控系统

一、普罗米修斯概述 Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。适合监控docker容器。因为kubernetes(俗称k8s)的流行带动了prometheus的发展。 Overview | Prometheus 二、时间序列数据 1、什么是序列数据 时间序列数据(TimeSer…

Docker安装es以及ik分词器

1、拉取镜像 docker pull elasticsearch:7.10.12、下载对应版本的ik分词、并将它们解压到ik文件夹下&#xff0c;如图 https://github.com/medcl/elasticsearch-analysis-ik/releases 3、在服务器上创建文件夹 mkdir /usr/elklog/elk/es mkdir /usr/elklog/elk/es/data mkdi…

Android 架构模式如何选择

作者&#xff1a;vivo 互联网客户端团队-Xu Jie Android架构模式飞速演进&#xff0c;目前已经有MVC、MVP、MVVM、MVI。到底哪一个才是自己业务场景最需要的&#xff0c;不深入理解的话是无法进行选择的。这篇文章就针对这些架构模式逐一解读。重点会介绍Compose为什么要结合MV…

脑电信号处理与特征提取——6.运用机器学习技术和脑电进行大脑解码(涂毅恒)

目录 六、运用机器学习技术和脑电进行大脑解码 6.1 前言 6.2 基于脑电数据的机器学习基础分析 6.3 基于脑电数据的机器学习进阶分析 6.4 代码解读 六、运用机器学习技术和脑电进行大脑解码 6.1 前言 6.2 基于脑电数据的机器学习基础分析 6.3 基于脑电数据的机器学习进阶分…

反射简述

什么是反射反射在java中起到什么样的作用获取class对象的三种方式反射的优缺点图 什么是反射 JAVA反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性&…

【yolov8+人/车流量统计】

文章目录 前言修改点PreprocessInference 总结 前言 之前写个yolov8的一个试用版&#xff0c;【深度学习】Yolov8追踪从0到1, 这要是做计数啥的,简单的一批&#xff0c;一套工程化的代码&#xff0c;给自己挖了个坑&#xff0c;说要实现一个基于yolov8的人/车流量统计. 现在要…

如何学习ARM嵌入式开发?

ARM和单片机还是有许多区别的&#xff0c;可以说比单片机的应用更为复杂吧&#xff0c;往往在单片机里只需要对一个寄存器赋值就可以的初始化&#xff0c;在ARM下就要调用库函数了。甚至每个引脚其功能都多了许多&#xff0c;相应的配置也会更为麻烦&#xff0c;但如果做多了AR…

回归分析简明教程【Regression Analysis】

为了理解回归背后的动机&#xff0c;让我们考虑以下简单的例子。 下面的散点图显示了2001年至2012年美国大学毕业生的数量。 现在根据现有的数据&#xff0c;如果有人问你2018年有多少名大学毕业生获得硕士学位呢&#xff1f; 可以看出&#xff0c;具有硕士学位的大学毕业生数量…

【数据挖掘torch】 基于LSTM电力系统负荷预测分析(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Mitmproxy的使用

目录 1.背景 2.Mitmproxy 1&#xff09;Windows安装 2&#xff09;定制开发 3&#xff09;启动 3.使用 4.问题 5.参考资料 1.背景 简单来说&#xff0c;背景就两个字“偷懒”&#xff0c;一个字“懒”。在API自动化脚本的开发中&#xff0c;一般都需要封装一下接口。如果没…

2023届浙江大学MPA提面A资格经验总结分享

本人是去年报考的浙大MPA项目&#xff0c;并通过提面获得了A资格&#xff0c;新一年浙大MPA项目提前批面试已经开始了&#xff0c;受达立易考周老师邀请来分享下我的提面经验&#xff0c;希望我的经验能对还在迷茫中的小伙伴有所帮助。 点开提面通知&#xff0c;首先看到…

2023项目管理产品排行榜:优化企业项目管理的顶级选择

随着全球竞争加剧和商业环境的变化&#xff0c;企业对项目管理的需求越来越迫切。优秀的项目管理产品能够帮助企业提高工作效率、资源利用率和项目交付质量。 本文参考了不同的产品测评网站&#xff0c;在众多项目管理产品中&#xff0c;总结了以下几款备受好评的项目管理工具&…

UNISOT让食品欺诈无处遁形

​​发表时间&#xff1a;2023年5月11日 全世界的消费者开始越来越关注食物的来源和采购方式。这是因为人们渴望吃得更健康、更用心&#xff0c;同时人们也认识到了购买可持续且合乎伦理道德的产品的必要性。 近年来&#xff0c;人们对食品溯源的渴望进一步加速&#xff0c;原…

go 中的代码漏洞检查

前言 不知道大家在开发 go 项目中有没有遇到过一些第三方包或者官方包中出现漏洞的问题&#xff0c;这些漏洞可能会影响到代码的功能、性能或者安全性。 现在针对这一问题&#xff0c;go 团队提供了 govulncheck 工具&#xff0c;帮助开发者快速地发现和修复这些漏洞。 什么…

一套AI+医疗模式的医院智慧导诊系统源码:springboot+redis+mybatis plus+mysql

一套AI医疗模式的医院智慧导诊系统源码 相关技术&#xff1a; 技术架构&#xff1a;springbootredismybatis plusmysqlRocketMQ 开发语言&#xff1a;java 开发工具&#xff1a;IDEA 前端框架&#xff1a;Uniapp 后端框架&#xff1a;springboot 数 据 库&#xff1a;mys…