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

RabbitMQ-hello

0. pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hong.rabbitmq</groupId><artifactId>rabbitmq-hello</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.0</version><configuration><encoding>utf-8</encoding><source>1.8</source><target>1.8</target></configuration></plugin></plugins></build><dependencies><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version></dependency></dependencies>
</project>

1. 生产者代码

package com.hong.rabbitmq1;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;public class Producer {//队列名称private static final String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception{ConnectionFactory factory = new ConnectionFactory();factory.setHost("10.211.55.4");factory.setUsername("admin");factory.setPassword("123456");Connection connection = factory.newConnection();Channel channel = connection.createChannel();/*** 声明消息队列* 第一个参数: 队列名称* 第二个参数: 是否持久化     false不持久化,rabbitmq重启队列丢失  true持久化,rabbitmq重启队列不丢失* 第三个参数: 是否排外       false排外只能一个消费者消费         false不排外可多消费者消费* 第四个参数: 是否自动删除   true自动删除最后一个消费者断开连接后该队列自动删除   false不自动删除* 第五个参数: 其他参数信息*/channel.queueDeclare(QUEUE_NAME,false,false,false,null);String message = "HELLO RABBITMQ!";/*** 发布消息* 第一个参数:要将消息发送到哪个交换机* 第二个参数:路由的 key 是哪个* 第三个参数:其他参数信息* 第四个参数:消息的消息体*/channel.basicPublish("",QUEUE_NAME,null,message.getBytes());System.out.println("消息发送完成!");}}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.消费者代码

package com.hong.rabbitmq1;import com.rabbitmq.client.*;public class Consumer {private static final String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception{ConnectionFactory factory = new ConnectionFactory();factory.setHost("10.211.55.4");factory.setUsername("admin");factory.setPassword("123456");Connection connection = factory.newConnection();Channel channel = connection.createChannel();DeliverCallback deliverCallback = (comsumerTag,message) -> System.out.println(new String(message.getBody()));CancelCallback cancelCallback = var -> System.out.println(var + "消息消费被中断!");/*** 消息消费* 第一个参数: 消费哪个队列* 第二个参数: 是否自动确认消息* 第三个参数: 当一个消息发送过来后的回调接口* 第四个参数: 当一个消费者取消订阅时的回调接口;取消消费者订阅队列时除了使用{@link Channel#basicCancel}之外的所有方式都会调用该回调方法*/channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);}
}

在这里插入图片描述

3.抽取工具类

package com.hong.utils;import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;/*** RabbitMQ创建Channel工具类*/
public class RabbitMQUtil {public static Channel getChannel() throws Exception{ConnectionFactory factory = new ConnectionFactory();factory.setHost("10.211.55.4");factory.setUsername("admin");factory.setPassword("123456");Connection connection = factory.newConnection();Channel channel = connection.createChannel();return channel;}
}

4.工作队列

4.1.生产者代码

package com.hong.rabbitmq2;import com.hong.utils.RabbitMQUtil;
import com.rabbitmq.client.Channel;import java.util.Scanner;public class Task {//队列名称private static final String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception{Channel channel = RabbitMQUtil.getChannel();channel.queueDeclare(QUEUE_NAME,false,false,false,null);Scanner scanner = new Scanner(System.in);System.out.println("请输入:");while (scanner.hasNext()){String message = scanner.next();channel.basicPublish("",QUEUE_NAME,null,message.getBytes());System.out.println("消息发送完成------" + message);}}
}

4.2.消费者代码

package com.hong.rabbitmq2;import com.hong.utils.RabbitMQUtil;
import com.rabbitmq.client.CancelCallback;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;public class Worker {private static final String QUEUE_NAME = "hello";public static void main(String[] args) throws Exception{Channel channel = RabbitMQUtil.getChannel();DeliverCallback deliverCallback = (comsumerTag, message) -> System.out.println("接收到的消息:"+  new String(message.getBody()));CancelCallback cancelCallback = var -> System.out.println(var + "消息消费被中断!");System.out.println("worker1等待接收消息");channel.basicConsume(QUEUE_NAME,true,deliverCallback,cancelCallback);}
}

4.3.说明

在这里插入图片描述
Worker启动2个worker1,worker2;两者依次消费消息(轮训/轮询)

http://www.lryc.cn/news/258017.html

相关文章:

  • 案例044:基于微信小程序的消防隐患在线举报系统
  • MES系统需要具备哪些性能方面的需求?
  • 数据在内存中的存储(整型篇)
  • 大一作业习题
  • Python大模型TensorFlow/PyTorch/Scikit-learn/Keras/OpenCV/Gensim
  • TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
  • pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)
  • swing快速入门(五)
  • 银河麒麟v10系统SSH远程管理及切换root用户的操作方法
  • 设计模式——建造者模式(Java示例)
  • 深入探索 Spring Boot:简化开发,加速部署的全方位利器
  • SpectralGPT: Spectral Foundation Model 论文翻译3
  • ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
  • HTML中使用JavaScript实现一个简单的鼠标悬停特效。
  • 深入.NET平台和C#编程总结大全
  • jOOQ的使用场景
  • Pytorch-Transformer轴承故障一维信号分类(三)
  • pycharm多线程报错的问题(未解决)
  • 【常用字符大全】含emoji表情
  • android 蓝牙开关设置
  • C++ extern “C“ 用法
  • HTML面试题---专题四
  • stm32项目(11)——基于stm32的俄罗斯方块游戏机
  • 【计算机网络基础2】IP地址和子网掩码
  • ES6-import后是否有{}的区别
  • rv1126-rv1109-以太网功能-eth-(原理篇)
  • 【IDEA】反向撤销操作快捷键 ctrl+shift+z 和搜狗热键冲突的解决办法
  • 数据结构之----逻辑结构、物理结构
  • pip 通过git安装库
  • C语言——从终端输入 3 个数 a、b、c,按从大到小的顺序输出。