【MQ简单模式】

news2024/9/20 22:44:17

14天阅读挑战赛

MQ 简单模式
1 、模式介绍
需求:使用简单模式完成消息传递
步骤:
① 创建工程(生成者、消费者)
② 分别添加依赖
③ 编写生产者发送消息
④ 编写消费者接收消息

 

在上图的模型中,有以下概念:
P :生产者,也就是要发送消息的程序
C :消费者:消息的接收者,会一直等待消息到来
queue :消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生
产者向其中投递消息,消费者从其中取出消息 2 、代码实现
1 、生产者
创建生产者项目 rabbitmq-producer
pom.xml 依赖 :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
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.dxw</groupId>
<artifactId>rabbitmq-producer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--rabbitmq java 客户端-->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
</dependencies>
</project>
生产者代码 Producer_HelloWorld:
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 生产者:发送消息
*/
public class Producer_HelloWorld {
public static void main(String[] args) throws
IOException, TimeoutException {
//1、创建连接工厂
ConnectionFactory factory = new
ConnectionFactory();
//2、设置参数
factory.setHost("localhost");//ip 默认localhost
factory.setPort(5672);//端口 默认5672
factory.setVirtualHost("/dxw");//虚拟机 默认/
factory.setUsername("dxw");//用户名 默认guest
factory.setPassword("1234");//密码 默认guest
//3、创建连接
Connection connection = factory.newConnection();
//4、创建Channel
Channel channel = connection.createChannel();
//5、创建队列
/*
* 参数解释:
* queueDeclare(String queue,
* boolean durable,
* boolean exclusive,
* boolean autoDelete,
* Map<String, Object> arguments)
* 1. queue:队列名称
* 如果没有一个名字叫hello_world的队列,则会创建该队
列,如果有则不会创建
* 2. durable:是否持久化,当mq重启之后,队列中消息还在
* 3. exclusive:
* 是否独占。只能有一个消费者监听这队列
* 当Connection关闭时,是否删除队列
* 4. autoDelete:是否自动删除。当没有Consumer时,自动
删除掉
* 5. arguments:参数。
*/
channel.queueDeclare("hello_world",true,false,false,null)
;
//6、发送消息
/*
* 参数解释:
* basicPublish(String exchange,
* String routingKey,
* BasicProperties props,
* byte[] body)
* 1. exchange:交换机名称。简单模式下交换机会使用默认的
""
* 2. routingKey:路由名称
* 3. props:配置信息
* 4. body:发送消息数据
*/
String body = "hello rabbitmq~~~";
channel.basicPublish("","hello_world",null,body.getBytes(
));
//7、释放资源
//channel.close();
//connection.close();
}
}
启动生产者后观察控制台 :

 

 

2 、消费者
创建消费者项目 rabbitmq-consumer
pom.xml 依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchemainstance"
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.dxw</groupId>
<artifactId>rabbitmq-consumer</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!--rabbitmq java 客户端-->
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.6.0</version>
</dependency>
</dependencies>
</project>
消费者代码 Consumer_HelloWorld:
import com.rabbitmq.client.*;
import java.io.IOException;
import java.util.concurrent.TimeoutException;
/**
* 消费者:接收消息
*/
public class Consumer_HelloWorld {
public static void main(String[] args) throws
IOException, TimeoutException {
//1、创建连接工厂
ConnectionFactory factory = new
ConnectionFactory();
//2. 设置参数
factory.setHost("localhost");//ip 默认值 localhost
factory.setPort(5672); //端口 默认值 5672
factory.setVirtualHost("/dxw");//虚拟机 默认/
factory.setUsername("dxw");//用户名 默认guest
factory.setPassword("1234");//密码 默认guest
//3. 创建连接 Connection
Connection connection = factory.newConnection();
//4. 创建Channel
Channel channel = connection.createChannel();
//5、创建队列
/*
* 参数解释:
* queueDeclare(String queue,
* boolean durable,
* boolean exclusive,
* boolean autoDelete,
* Map<String, Object> arguments)
* 1. queue:队列名称
* 如果没有一个名字叫hello_world的队列,则会创建该
队列,如果有则不会创建
* 2. durable:是否持久化,当mq重启之后,队列中消息还在
* 3. exclusive:
* 是否独占。只能有一个消费者监听这队列
* 当Connection关闭时,是否删除队列
* 4. autoDelete:是否自动删除。当没有Consumer时,自
动删除掉
* 5. arguments:参数。
*/
channel.queueDeclare("hello_world",true,false,false,null)
;
//6、接收消息
Consumer consumer = new DefaultConsumer(channel){
/*
回调方法,当收到消息后,会自动执行该方法
1. consumerTag:标识
2. envelope:获取一些信息,交换机,路由key...
3. properties:配置信息
4. body:数据
*/
@Override
public 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));
}
};
/*
* 参数解释:
* basicConsume(String queue, boolean autoAck,
Consumer callback)
* 1. queue:队列名称
* 2. autoAck:是否自动确认
* 3. callback:回调对象
*/
channel.basicConsume("hello_world",true,consumer);
//关闭资源?不要
}
}
启动消费者后 , 可以接收到生产者发送的数据 :

 

 

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

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

相关文章

数据库索引的基本操作(sql语句)

表索引的增删改查&#xff08;sql语句&#xff09; 概念&#xff1a; 索引由表中的一列或多列组合而成&#xff0c;目的是优化数据库的查询速度。向索引表中插入数据时&#xff0c;数据库系统需要按照索引进行排序。有时&#xff0c;可以先将索引删除&#xff0c;然后向表插入…

Docker学习(1)—— 安装Docker

一. 安装Docker 1. 查看CentOS是否是7以上的版本 cat /etc/redhat-release 2. 安装gcc yum -y install gcc yum -y install gcc-c 3. 安装需要的软件包 yum install -y yum-utils 4. 设置stable镜像仓库 yum-config-manager --add-repo http://mirrors.aliyun.com/doc…

p38 MAPK调控酶及转录因子

MAPK 与 p38 MAPK 作为对外界物理和化学性质变化的响应&#xff0c;哺乳动物细胞激活有丝分裂原激活蛋白激酶 (MAPK) 的四个特征性亚家族&#xff1a;ERK1/2、JNK、p38 和 ERK5。其中 p38 MAPKs 是一类保守的丝氨酸-苏氨酸蛋白激酶&#xff0c;可被多种细胞外炎症因子 (如TNF-α…

语义分割及DeeplabV3+模型

一、基本概念 将视觉输入分为不同的语义可解释类别&#xff1b;通俗点说就是区分不同部分。 分类&#xff1a; b)语义分割 c)实例分割 d)全景分割 语义分割一般以平均IOU(Intersection Over Union,并交比)来评价性能&#xff0c;其公式如下&#xff1a; 目的是使…

Python学习----Demo(pyecharts)

PyEcharts 就是百度的Echarts&#xff0c;针对Python有一款专门的&#xff0c;所以就叫PyEcharts 官方网站&#xff1a; 文档&#xff1a; https://pyecharts.org/#/zh-cn/ 示例&#xff1a; https://gallery.pyecharts.org/#/README 通过pip安装 pip install pyecharts 或者…

关于Docker中容器之间互相访问问题

背景&#xff1a; 在学习 Docker 过程中&#xff0c;自己先开启了一个 mysql 容器&#xff0c;并且通过端口映射Navicat可以远程连接 后来在部署 nacos 过程中&#xff0c;对于其中参数 MYSQL_SERVICE_HOST 配置 mysql 的 IP 时 首先配置的是 localhost&#xff0c;结果 nacos…

Opencv项目实战:16 虚拟拖拽系统

0、项目介绍 这次使用cvzone模块&#xff0c;制作一个虚拟拖拽系统&#xff0c;我们根据索引可以知道食指与中指的索引为8和12&#xff0c;当两指间合并时可以对虚拟方块进行拖拽&#xff0c;张开时解除拖拽&#xff0c;方块停在此处。虽然目前仍然存在一定的bug&#xff0c;即…

网站seo怎么优化?

一、网站搭建 1、选择合适的建站软件。 2、网站模板的选择。 3、title的选择至关重要。 4、长尾关键词的选择。 二、站内优化 1、首页title keywords description等布局好要优化的关键词&#xff0c;页面中间和底部也要布局关键词且用标签加粗&#xff01; 2、网站 URL静态。…

Go runtime剖析系列(一):内存管理

Go 的内存管理总览 程序在运行过程中会不断的调用分配器分配堆内存&#xff0c;同时也会通过赋值器更新内存数据&#xff0c;如果我们将内存看做为一个个小的对象集合&#xff0c;那程序的运行其实就是更改这个对象图&#xff0c;其中分配器在这个对象图中创建节点&#xff0c…

Flutter 的缓存策略

Flutter 的缓存策略 原文 https://medium.com/romaingreaume/implementing-a-cache-strategy-in-your-flutter-app-5db3e316e7c9 前言 在移动应用程序中&#xff0c;缓存管理是一件非常重要的事情。 在本文中&#xff0c;我将告诉您如何在我的公司 Beapp 中设置策略缓存。 正文…

ES-分词器

简介 分词器是es中的一个组件&#xff0c;通俗意义上理解&#xff0c;就是将一段文本按照一定的逻辑&#xff0c;分析成多个词语&#xff0c;同时对这些词语进行常规化的一种工具&#xff1b;ES会将text格式的字段按照分词器进行分词&#xff0c;并编排成倒排索引&#xff0c;…

Vben Admin 的介绍以及使用

Vben Admin 的介绍以及使用初识 Vben Admin一、安装vue-vben-admin二、vben admin 目录介绍1.运行项目好用的插件启动项目打开终端三 项目分析1. 路由配置新增路由四 : vben admin 的使用初识 Vben Admin Vben Admin官方文档地址 好像官网挂了 !! 嘤嘤嘤嘤嘤 因为最近业务需要…

蓝牙无线自制串口模块连接穿越机配置工具

蓝牙无线自制串口模块连接穿越机配置工具1. 目的2. 验证环境3. BLE SPP验证4. BT SPP验证5. 参考资料穿越机配置工具 SpeedyBeeBetaFlightConfigurator 目前&#xff0c;市面上连接BetaFlight给飞控固件调参比较顺手的工具大体上是官网的BetaFlight Configurator(国内都叫BF地…

OFD转PDF ~java实现

OFD转PDF ~java实现 当你在查这个问题时&#xff0c;说明大家都已经接触到OFD这个新的版式文档了。OFD格式对标的PDF&#xff0c;目前关于PDF的转换都比较成熟&#xff0c;但是当OFD出现后&#xff0c;切发现能实现转换却似乎有所困难。尝试网上搜了一下这方面的资料&#xff…

别再当大冤种了,揭开3D建模报班6个常见套路

1⃣承诺有就业保障 任何机构给你承诺✊所谓的包就业都是耍流氓&#x1f621;&#xff0c;请不要信❗️ 承诺就业保障的机构无非3种情况&#xff1a; &#x1f539;赚取学员的信任感&#xff0c;吸引学员报名和交钱&#xff1b; &#x1f538;提高机构的“专业度”和所谓的“…

JWT详解(文章内嵌jwt工具类)

JWT 基础概念详解&#xff0c;工具类和使用方法放在最后 什么是 JWT? JWT &#xff08;JSON Web Token&#xff09; 是目前最流行的跨域认证解决方案&#xff0c;是一种基于 Token 的认证授权机制。 从 JWT 的全称可以看出&#xff0c;JWT 本身也是 Token&#xff0c;一种规…

【现代密码学原理】——消息认证码(学习笔记)

&#x1f4d6; 前言&#xff1a;消息认证码 MAC&#xff08;Message Authentication Code&#xff09;是经过特定算法后产生的一小段信息&#xff0c;检查某段消息的完整性&#xff0c;以及作身份验证。它可以用来检查在消息传递过程中&#xff0c;其内容是否被更改过&#xff…

Appium 移动端自动化测试(Mac)

目录 adb调试工具&#xff08;Android Debug Bridge&#xff09; adb常用命令 Appium使用 快速体验步骤 Appium常用方法 UIAutomatorViewer 获取元素 元素等待&#xff08;在指定时间内一直等待 元素操作 Swipe 滑动和拖拽事件&#xff08;Scroll、drag_and_drop&#…

pytorch深度学习实战19

第十九课 卷积层的填充和步幅 目录 理论部分 实践部分 理论部分 首先看一下卷积层的填充。 上图所示的情况会有个问题&#xff0c;如果卷积核不变的话&#xff08;一直是5*5的卷积核&#xff09;&#xff0c;那么我的网络最多也就只能弄到第七层了&#xff0c;如果我想搭建更…

恒太照明在北交所上市:募资规模缩水三成,第三季度收入下滑

11月17日&#xff0c;江苏恒太照明股份有限公司&#xff08;下称“恒太照明”&#xff0c;NQ:873339&#xff09;在北京证券交易所&#xff08;即“北交所”&#xff09;上市。本次上市&#xff0c;恒太照明的发行价格为6.28元/股&#xff0c;发行数量为2220万股&#xff0c;募…