使用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

[USACO23OPEN] Field Day S

题目描述 Each of Farmer John’s N N N barns has selected a team of C C C cows to participate in field day. The breed of every cow is either a Guernsey or a Holstein. The difference between two teams is defined to be the number of positions i i i ( 1 ≤…

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…

人工智能(pytorch)搭建模型18-含有注意力机制的CoAtNet模型的搭建,加载数据进行模型训练

大家好,我是微学AI,今天我给大家介绍一下人工智能(pytorch)搭建模型18-pytorch搭建有注意力机制的CoAtNet模型模型,加载数据进行模型训练。本文我们将详细介绍CoAtNet模型的原理,并通过一个基于PyTorch框架的实例,展示如何加载数据,训练CoAtNet模型,从操作上理解该模型。…

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;暂未调试。 该系统是…

Cause: org.postgresql.util.PSQLException: ERROR: syntax error at end of input

这个错误提示表明在 PostgreSQL 中存在语法错误&#xff0c;即查询语句的末尾存在语法问题。可能有以下几种情况导致这个错误&#xff1a; 查询语句未正确结束&#xff1a;请检查你的查询语句是否完整&#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可以理解为计算机视觉技术和人工…

MicroBlaZe 相关知识点

1.DDR3——存储.c的应用程序。需要两个时钟&#xff08;200MHZ输入&#xff0c;还有一个是特权同学的166.6m&#xff09; 2.QSPI FLASH——对flash进行固化&#xff08;1.需要50M外部时钟输入2.在SDK里面需要修改值为5&#xff09;。 3.MicroBlaZe的输入时钟&#xff08;mig输…