当前位置: 首页 > news >正文

JAVA发送消息到RabbitMq

项目中,作为生产者自定义消息发送到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 Klay* @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 Klay* @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.lryc.cn/news/195758.html

相关文章:

  • Python 函数(lambda 匿名函数、自定义函数、装饰器)基本使用指南
  • 第五届芜湖机器人展,正运动助力智能装备“更快更准”更智能!
  • JVM八股文
  • 代码随想录算法训练营第二十四天丨 回溯算法part02
  • 【Python机器学习】零基础掌握AgglomerativeClustering聚类
  • uniapp小程序中给web-view页面添加授权弹窗(使用cover-view组件覆盖实现该功能)
  • 2023年全球及中国CGT CDMO市场发展现状分析:CGT 渗透率有效助力CGT CDMO快速发展[图]
  • 上抖音热搜榜需要做哪些准备?
  • LDA代码训练报错记录
  • 【吞噬星空】爽翻,徐欣喜提永恒之体,罗峰秒杀败类,阿特金磕头认错
  • 【c++】跟webrtc学状态改变
  • 【入门】.Net Core 6 WebApi 项目搭建
  • xtrabackup备份 脚本
  • 13SpringMVC中拦截器的配置(拦截规则)和多个拦截器的preHandle,postHandle执行顺序原理详解
  • Liunx中系统安全及文件系统(极其粗糙版)
  • Java中的数组
  • Java反射调用jar包实现多态
  • PowerBI 一些基础功能
  • Mac用命令行安装Adobe代码字体Source Code Pro
  • RustDay05------Exercise[31-40]
  • wireshark过滤器的简单介绍
  • 数据结构:二叉树(1)
  • [nlp] chathome—家居装修垂类大语言模型的开发和评估
  • http(下)
  • Python学习基础笔记七十二——IDE集成开发环境
  • [MQ]Win平台RocketMQ安装启动
  • vscode工程屏蔽不使用的文件夹或文件的方法
  • 黑马JVM总结(三十四)
  • [linux]vncserver常用终端命令合集
  • 亚马逊、eBay,速卖通,国际站买家账号支付异常问题解决方法