使用RabbitMQ

使用RabbitMQ

1 Docker安装RabbitMQ

1.1 安装RabbitMQ

# 下载含有管理页面的镜像
docker pull rabbitmq:3.8.8-management# 创建容器
# 5672:应用访问端口;15672:控制台Web端口号;
docker run -itd \
--name=my-rabbitmq \
--restart=always \
-p 15672:15672 \
-p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=123456 \
-v /home/rabbitmq/data:/var/lib/rabbitmq rabbitmq:3.8.8-management

1.2 访问RabbitMQ

# 访问网页
http://192.168.108.200:15672

在这里插入图片描述

2 SpringBoot使用RabbitMQ

2.1 说明

  1. 引入“spring-boot-starter-amqp”依赖;
  2. 使用“@Configuration”配置消息队列;
  3. 使用RabbitTemplate发送消息;
  4. 使用@RabbitListener监听消息;

2.2 工程目录

在这里插入图片描述

2.3 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/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.mason</groupId><artifactId>myrabbitmq</artifactId><version>1.0</version><properties><java.version>11</java.version><spring-boot-version>2.3.12.RELEASE</spring-boot-version><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Config the RebbitMQ --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency></dependencies><dependencyManagement><!-- 注意:尽量在此配置Spring-Boot版本,子应用中可以不配置SpringBoot版本 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot-version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><!-- 配置Maven插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.0</version><configuration><skipTests>true</skipTests></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot-version}</version></plugin></plugins></build></project>

2.4 yml

server:port: 8081servlet:context-path: /myrmspring:# 设置应用名application:name: my-rabbitmq# 配置RabbitMQrabbitmq:host: 192.168.108.200port: 5672username: rabbitmqpassword: 123456

2.5 config

ConfigRabbitmq.java

package com.mason.myrabbitmq.config;import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import static com.mason.myrabbitmq.config.MyRoutingKey.QUEUE_HELLO;@Configuration
public class ConfigRabbitmq {@Beanpublic Queue createDiscoverQueue(){return new Queue(QUEUE_HELLO, true);}}

MyRoutingKey.java

package com.mason.myrabbitmq.config;public class MyRoutingKey {public static final String QUEUE_HELLO ="queue_hello";
}

2.6 controller

QueueController.java

package com.mason.myrabbitmq.controller;import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import static com.mason.myrabbitmq.config.MyRoutingKey.QUEUE_HELLO;/*** " @RestController是@Controller和@ResponseBody和合并 "*/@RestController
@RequestMapping("/test")
public class QueueController {@Autowiredprivate RabbitTemplate rabbitTemplate;@RequestMapping("/send")public String sendMessage() {System.out.println("1 发送数据");System.out.println("Hello My RabbitMQ");this.rabbitTemplate.convertAndSend(QUEUE_HELLO, "Hello My RabbitMQ ");return "Success";}
}

2.7 service

QueueService.java

package com.mason.myrabbitmq.service;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;import static com.mason.myrabbitmq.config.MyRoutingKey.QUEUE_HELLO;@Service
public class QueueService {// 监听RabbitMQ@RabbitListener(queues = QUEUE_HELLO)public void receiveMessage(String msg){System.out.println("2 获取RabbitMQ数据");System.out.println(msg);}
}

2.8 MyrabbitmqApplication.java

package com.mason.myrabbitmq;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MyrabbitmqApplication {public static void main(String[] args) {SpringApplication.run(MyrabbitmqApplication.class, args);}
}

2.9 截图

在这里插入图片描述

3 Python使用RabbitMQ

3.1 安装pika

# pika是操作RabbitMQ的依赖包
pip install pika

3,2 工程目录

在这里插入图片描述

3.3 main.py

# 导入channel
from my_decorator import channel
from my_rabbitmq import init_queueinit_queue()# 运行APP
if __name__ == '__main__':print("RabbitMQ start consuming")channel.start_consuming()

3.4 my_decorator.py


# 导入pika使用RabbitMQ
import pika
from pika.adapters.blocking_connection import BlockingChannel# 导入routing key
from my_routing_key import RoutingKey# 连接RabbitMQ
def conn_rabbitmq() -> BlockingChannel:host = "192.168.108.200"username = "rabbitmq"password = "123456"port = 5672# 配置rabbitmq连接crenditials = pika.PlainCredentials(username=username, password=password)conn_parameter = pika.ConnectionParameters(host=host, port=port, credentials=crenditials)# 连接rabbitmqconnection = pika.BlockingConnection(conn_parameter)# Generate the channelreturn connection.channel()# 连接channel
channel = conn_rabbitmq()# 声明 routing key
def declare_routing_key():channel.queue_declare(RoutingKey.my_routing_key)declare_routing_key()# 自定义装饰器
def queue(queue_name):"""监听rabbitmq消息:param queue_name: rabbitmq的消息名称:return: 装饰器方法"""def decorator(func):channel.basic_consume(queue=queue_name, auto_ack=True, on_message_callback=func)return decorator

3.5 my_rabbitmq.py


# 使用装饰器监听rabbitmq
from my_decorator import queue# 导入routing key
from my_routing_key import RoutingKeydef init_queue():print("初始化QueueMessage")pass@queue(RoutingKey.my_routing_key)
def get_message(ch, method, properties, body):print("2 接收RabbitMQ")print(body)pass

3.6 my_routing_key.py

# 设置RoutingKeyclass RoutingKey():my_routing_key = "my_routing_key"

3.7 my_send_message.py


from my_decorator import channel# 导入routing key
from my_routing_key import RoutingKeydef send_data():print("1 发送RabbitMQ")body = "Hello my data"channel.basic_publish(exchange='', routing_key=RoutingKey.my_routing_key, body=body)send_data()

3.8 截图

  1. 运行main.py,实时接收信息;
  2. 运行my_send_message.py发送消息;

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

OpenCV 优化和改进图像处理应用功能的方法与实践

OpenCV 优化和改进图像处理应用功能的方法与实践 导语一、性能优化二、算法改进三、用户体验改进四、应用实践示例&#xff1a;实时图像滤波总结 导语 图像处理应用是计算机视觉和图像处理领域的关键应用之一&#xff0c;通过对图像进行处理和分析&#xff0c;可以提取有用的信…

创建一门简单的解释性编程语言并实现它的解释器

背景 最近刷到大佬的教程&#xff0c;跟着学一下 效果 开始时 输入姓名和年龄后 代码 自创编程语言SimpleScript: 自创一门简易脚本支持中文编程 (gitee.com) 解析 1.词法分析 将程序的每个字符串精准划分出来&#xff0c;形成多个单词Token 2.语法分析 将各段Token再…

Android 查看ANR和Crash日志(adb bugreport)

今天测试那儿出了个ANR&#xff0c;我自己手机没问题&#xff0c;很烦&#xff0c;定位不了位置。 于是还是得用ADB连接来看一下&#xff0c;之前用&#xff0c;但是老是会忘记&#xff0c;今天总结一下。 ADB命令查看应用包名_adb查看包名命令_&岁月不待人&的博客-C…

TeeChart for.NET Crack

TeeChart for.NET Crack TeeChart for.NET为各种图表需求提供了图表控件&#xff0c;包括金融、科学和统计等重要的垂直领域。它可以处理您的数据&#xff0c;在各种平台上无缝创建信息丰富、引人入胜的图表&#xff0c;包括Windows窗体、WPF、带有HTML5/Javascript渲染的ASP.N…

【C++】string类模拟

文章目录 成员变量和查看接口迭代器&#xff08;读和读写&#xff09;operator[]&#xff08;读和读写&#xff09;c_str()size() 构造函数用字符串构造用对象构造&#xff08;两种方法&#xff09;析构 赋值运算符重载扩容和调整reserve()resize()clear() 增删查改push_back()…

产业大模型刚开卷,京东跑进“最后半公里”

点击关注 文&#xff5c;姚 悦 编&#xff5c;王一粟 “京东一直在探索哪些产品、技术、场景可以真正把大模型用起来&#xff0c;在我们内部的场景中反复验证后&#xff0c;才决定在7月份对外发布&#xff0c;现在我们在零售、健康、物流、金融等业务场景里已经积累了一些经…

记一次阿里云被挖矿处理记录

摘要 莫名其妙的服务器就被攻击了&#xff0c;又被薅了羊毛&#xff0c;当做免费的挖矿劳动力了。 一、起因 上班&#xff08;摸鱼&#xff09;好好的&#xff0c;突然收到一条阿里云的推送短信&#xff0c;不看不知道&#xff0c;两台服务器被拉去作为苦力&#xff0c;挖矿去…

迭代读取文件

使用 torch.utils.data.dataset.Dataset 收集数据信息&#xff0c;创建数据集。 使用 import torch.utils.data.dataloader 创建一个可以批量迭代的数据载入器&#xff0c;并通过 for 循环批量读取所有文件的数据。 import torch.utils.data.dataset as dataset import torch…

光伏并网逆变器低电压穿越MATLAB仿真模型

使用MATLAB 2017b搭建 光伏逆变器低电压穿越仿真模型&#xff0c;boost加NPC拓扑结构&#xff0c;基于MATLAB/Simulink建模仿真。具备中点平衡SVPWM控制&#xff0c;正负序分离控制&#xff0c;pll&#xff0c;可进行低电压穿越仿真。 控制结构完整&#xff0c;波形完美&…

java学习路程之篇二、知识点、配置JAVA_HOME、跨平台、JVM、JRE、JDK

文章目录 1、Java背景介绍2、Java跨平台性3、JDK的下载和安装4、第一个Java程序5、HelloWorld案例详解6、JVM、JRE和JDK7、配置JAVA_HOME 1、Java背景介绍 2、Java跨平台性 3、JDK的下载和安装 4、第一个Java程序 5、HelloWorld案例详解 6、JVM、JRE和JDK 7、配置JAVA_HOME

MySQL(2)

建表 mysql> create table work(-> ‘部门号’ int(11) not null,-> ‘职工号’ int(11) not null,-> ‘工作时间’ date not null,-> ‘工资’ float(8,2) not null,-> ‘政治面貌’ varchar(10) not null default 群众,-> ‘姓名’ varchar(20) not nu…

ELK 企业级日志分析系统

目录 一&#xff1a;ELK 介绍 1、ELK 简介 2、filebeat 结合 logstash 好处 3、为什么要使用 ELK 4、完整日志系统基本特征 5、ELK 的工作原理 二&#xff1a;ELK Elasticsearch 集群部署 1、环境准备 2、部署 Elasticsearch 软件 &#xff08;1&#xff09;安装elasti…

在线考试系统

在线考试系统 简介 该系统由C#开发语言开发&#xff0c;数据库是sql server2016&#xff0c;前端用到的前端技术有Bootstrap&#xff0c;js&#xff0c;css等前端技术&#xff0c;同时用到的.Net Core MVC的技术框架。另外本系统也支持mysql&#xff0c;暂未调试。 该系统是…

计算机存储设备

缓存为啥比内存快 内存使用 DRAM 来存储数据的、也就是动态随机存储器。内部使用 MOS 和一个电容来存储。 需要不停地给它刷新、保持它的状态、要是不刷新、数据就丢掉了、所以叫动态 、DRAM 缓存使用 SRAM 来存储数据、使用多个晶体管(比如6个)就是为了存储1比特 内存编码…

Element-UI el-table属性row-class-name用法

文章目录 前言官方示例自定义条件样式设置背景颜色样式stripe属性 设置背景颜色样式设置字体颜色总结 前言 可以通过指定 Table 组件的 row-class-name 属性来为 Table 中的某一行添加 class&#xff0c;表明该行处于某种状态。 官方示例 代码如下&#xff1a; <el-table…

直播美颜SDK与智能美妆:技术融合的未来

对于许多直播主和观众来说&#xff0c;如何在直播中呈现最佳的外貌成为了一个重要问题。为了解决这个问题&#xff0c;直播美颜SDK与智能美妆技术的融合应运而生&#xff0c;为用户带来了前所未有的美妆体验。 简单来讲&#xff0c;直播美颜SDK可以理解为计算机视觉技术和人工…

重磅预告丨Fortinet Demo Day系列实战攻防演练来袭!

随着网络安全形势的日趋严峻&#xff0c;越来越多的企业遭受了勒索、欺诈等危害。在高昂的赎金、生产损失&#xff0c;以及名誉损害的恐惧中&#xff0c;企业已经谈“黑”色变。黑客是如何悄无声息的“越过”重重高墙、道道壁垒进入到生产环境、办公空间&#xff0c;并在内网疯…

hydra详解(仅供学习参考)

一、概述。 Hydra是一款非常强大的渗透工具&#xff0c;由著名的黑客组织THC开发的一款开源工具。 二、使用方法。 hybra基础语法&#xff1a; hydra 参数 IP 服务 参数&#xff1a; -l login 小写&#xff0c;指定用户名进行破解 -L file 大写&#xff0c;指定用户的用户名…

loki技巧 - 结构化log日志文本

将非结构化的log日志信息结构化为JSON格式&#xff0c;以方便在Grafana界面侧的浏览和查询。 0. 目录 1. 需求背景和描述2. 实现&#xff08;Promtail侧&#xff09;3. 注意事项4. 后记5. 参考 1. 需求背景和描述 最近几个月&#xff0c;部门内部开始尝试统一日志收集、查询统…

Zotero翻译插件“zotero pdf translate”——使用时出现广告的问题的解决办法

一、背景&#xff1a; 在Zotero上安装了“zotero-pdf-translate”插件来辅助翻译。今天忽然发现&#xff0c;在使用CNKI翻译引擎的时候&#xff0c;末尾被加上了广告&#xff1a; (查看名企职位领高薪offer&#xff01;--->智联招聘https***dict.cnki.net/ad.html) 如下&…