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

RabbitMQ(一)概述第一个应用程序

文章目录

  • 概述
    • AMQP和JMS
    • 官网
    • 安装
    • 开始第一个程序

概述

消息队列是实现应用程序和应用程序之间通信的中间件产品

AMQP和JMS

在这里插入图片描述
工作体系
在这里插入图片描述

官网

https://www.rabbitmq.com/
RabbitMQ是一款基于AMQP、由Erlang语言开发的消息队列产品

安装

# 拉取镜像
docker pull rabbitmq:3.13-management# -d 参数:后台运行 Docker 容器
# --name 参数:设置容器名称
# -p 参数:映射端口号,格式是“宿主机端口号:容器内端口号”。5672供客户端程序访问,15672供后台管理界面访问
# -v 参数:卷映射目录
# -e 参数:设置容器内的环境变量,这里我们设置了登录RabbitMQ管理后台的默认用户和密码
docker run -d \
--name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-v rabbitmq-plugin:/plugins \
-e RABBITMQ_DEFAULT_USER=guest \
-e RABBITMQ_DEFAULT_PASS=123456 \
rabbitmq:3.13-management

开始第一个程序

官网第一个程序
https://www.rabbitmq.com/tutorials/tutorial-one-java

// 生产者
import com.rabbitmq.client.Channel;  
import com.rabbitmq.client.Connection;  
import com.rabbitmq.client.ConnectionFactory;  public class Producer {  public static void main(String[] args) throws Exception {  // 创建连接工厂  ConnectionFactory connectionFactory = new ConnectionFactory();  // 设置主机地址  connectionFactory.setHost("192.168.200.100");  // 设置连接端口号:默认为 5672connectionFactory.setPort(5672);// 虚拟主机名称:默认为 /connectionFactory.setVirtualHost("/");// 设置连接用户名;默认为guest  connectionFactory.setUsername("guest");// 设置连接密码;默认为guest  connectionFactory.setPassword("123456");// 创建连接  Connection connection = connectionFactory.newConnection();  // 创建频道  Channel channel = connection.createChannel();  // 声明(创建)队列  // queue      参数1:队列名称  // durable    参数2:是否定义持久化队列,当 MQ 重启之后还在  // exclusive  参数3:是否独占本次连接。若独占,只能有一个消费者监听这个队列且 Connection 关闭时删除这个队列  // autoDelete 参数4:是否在不使用的时候自动删除队列,也就是在没有Consumer时自动删除  // arguments  参数5:队列其它参数  channel.queueDeclare("simple_queue", true, false, false, null);  // 要发送的信息  String message = "你好;小兔子!";  // 参数1:交换机名称,如果没有指定则使用默认Default Exchange  // 参数2:路由key,简单模式可以传递队列名称  // 参数3:配置信息  // 参数4:消息内容  channel.basicPublish("", "simple_queue", null, message.getBytes());  System.out.println("已发送消息:" + message);  // 关闭资源  channel.close();  connection.close();  }  }
// 消费者import com.rabbitmq.client.*;import java.io.IOException;public class Consumer {public static void main(String[] args) throws Exception {// 1.创建连接工厂ConnectionFactory factory = new ConnectionFactory();// 2. 设置参数factory.setHost("192.168.217.134");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("guest");factory.setPassword("123456");// 3. 创建连接 ConnectionConnection connection = factory.newConnection();// 4. 创建ChannelChannel channel = connection.createChannel();// 5. 创建队列// 如果没有一个名字叫simple_queue的队列,则会创建该队列,如果有则不会创建// 参数1. queue:队列名称// 参数2. durable:是否持久化。如果持久化,则当MQ重启之后还在// 参数3. exclusive:是否独占。// 参数4. autoDelete:是否自动删除。当没有Consumer时,自动删除掉// 参数5. arguments:其它参数。// channel.queueDeclare("simple_queue",true,false,false,null);// 接收消息DefaultConsumer consumer = new DefaultConsumer(channel){// 回调方法,当收到消息后,会自动执行该方法// 参数1. consumerTag:标识// 参数2. envelope:获取一些信息,交换机,路由key...// 参数3. properties:配置信息// 参数4. body:数据@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("consumerTag:"+consumerTag);System.out.println("Exchange:"+envelope.getExchange());System.out.println("RoutingKey:"+envelope.getRoutingKey());System.out.println("properties:"+properties);System.out.println("body:"+new String(body));}};// 参数1. queue:队列名称// 参数2. autoAck:是否自动确认,类似咱们发短信,发送成功会收到一个确认消息// 参数3. callback:回调对象// 消费者类似一个监听程序,主要是用来监听消息channel.basicConsume("simple_queue",true,consumer);}}

相关文章:

  • 视频监控平台AS-V1000产品介绍:账户或用户数据的导入和导出功能介绍
  • ts:条件类型
  • MySQL:如果用left join的话,左边的表一定是驱动表吗
  • Diffusion Policy:基于扩散模型的机器人动作生成策略
  • CLIP源码详解:clip.py 文件
  • 【除了知乎,大家都在逛什么?持续更新~~】
  • python数据分析——apply 1
  • 全局查询筛选器适用场景 以及各场景示例
  • 算法刷题day54:搜索(一)
  • Alamofire常见GET/POST等请求方式的使用,响应直接为json
  • HQL面试题练习 —— 取出累计值与1000差值最小的记录
  • 链表经典题目—相交链表和链表倒数第k个节点
  • 基于香橙派 Ai Pro的ROS Qt人机交互软件部署指南
  • 漫步者x1穷鬼耳机双耳断连
  • idea配置ssh、sftp连接服务器,docker插件使用,极其方便,无需再开第三方软件去操作服务器了,集成用于Idea一体
  • canvas 绘制双线技巧
  • Docker下部署自己的LNMP工作环境
  • ECS应用管理最佳实践
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • React+TypeScript入门
  • tweak 支持第三方库
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue ES6 Jade Scss Webpack Gulp
  • 阿里云前端周刊 - 第 26 期
  • 安装python包到指定虚拟环境
  • 给初学者:JavaScript 中数组操作注意点
  • 简单数学运算程序(不定期更新)
  • 强力优化Rancher k8s中国区的使用体验
  • 网络应用优化——时延与带宽
  • ionic入门之数据绑定显示-1
  • Semaphore
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • (4)Elastix图像配准:3D图像
  • (C11) 泛型表达式
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (全注解开发)学习Spring-MVC的第三天
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (小白学Java)Java简介和基本配置
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)memcache、redis缓存
  • *p++,*(p++),*++p,(*p)++区别?
  • .NET 命令行参数包含应用程序路径吗?
  • .net 生成二级域名
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .NET中 MVC 工厂模式浅析
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @Controller和@RestController的区别?
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [codeforces]Recover the String
  • [C语言]——C语言常见概念(1)