使用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.hqwc.cn/news/14250.html

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

相关文章

html,css笔记1

这里写目录标题 一、快捷键及基础常识基础框架2.lang语言种类3.字符集4.HTML常用标签4.1标题标签&#xff08;重要&#xff09;4.2段落和换行标签(重要)4.3文本格式化标签 一、快捷键及基础常识 1.快速复制一行 快捷键&#xff1a;shiftalt下箭头 光标定位到要复制的一行 2.…

CAD绘制三维升旗台

首先绘制长方体的底座 用交叉对角线来定位&#xff0c;绘制一个小一点的矩形&#xff0c;用来定位 大概的效果&#xff1a; 沿着矩形的一个角绘制三个长方体&#xff0c;形成护栏 用阵列或者复制等形成四个角的护栏 旋转&#xff0c;换成真实的效果图&#xff1a; 添加一个圆…

Leetcode刷题笔记--Hot11-20

1--有效的括号&#xff08;20&#xff09; 主要思路&#xff1a; 利用栈&#xff0c;遍历字符串&#xff0c;遇到左括号则入栈&#xff0c;遇到右括号则出栈&#xff0c;并判断出栈元素是否与右括号匹配&#xff1b; 当字符串有效时&#xff0c;栈为空&#xff08;所有左括号都…

多元回归预测 | Matlab麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 麻雀算法(SSA)优化极限梯度提升树XGBoost回归预测,SSA-XGBoost回归预测模型,多变量输入模型,多变量输入模型,matlab代码回归预测,多

飞轮储能系统的建模与MATLAB仿真(永磁同步电机作为飞轮驱动电机)

简介 飞轮储能系统由于其高储能密度、高效率、轻污染的优点而越来越受到重视。飞轮储能系统以高速旋转的飞轮为依托&#xff0c;通过电力电子设备实现电能与动能的相互转化&#xff0c;从而在负载调峰、功率平抑、不间断电源等多领域都有很好的应用表现。 本文选用永磁同步电机…

【C++】list模拟实现

&#x1f680; 作者简介&#xff1a;一名在后端领域学习&#xff0c;并渴望能够学有所成的追梦人。 &#x1f681; 个人主页&#xff1a;不 良 &#x1f525; 系列专栏&#xff1a;&#x1f6f8;C &#x1f6f9;Linux &#x1f4d5; 学习格言&#xff1a;博观而约取&#xff0…

【大语言模型】15分钟快速掌握LangChain以及ChatGLM

10分钟快速掌握LangChain LangChain简介LangChain中的核心概念1. Components and Chains2. Prompt Templates and Values3. Example Selectors4. Output Parsers5. Indexes and Retrievers6. Chat Message History7. Agents and Tookits LangChain的代码结构1. LangChain中提供…

二叉树前中后序的非递归实现

前言 &#xff1a; 递归我们会有一些问题的 为什么有递归就一定有非递归呢&#xff1f;&#xff1f;首先递归是有一定缺陷的 递归真正的缺陷是&#xff0c;每一个程序运行起来呢都是一个线程的形式&#xff0c;但是每一个线程都会有独立的栈空间&#xff0c;但是栈空间是很…

性能优化(一)JMeter使用

简介&#xff1a; jmeter 是 apache 公司基于 java 开发的一款开源压力测试工具&#xff0c;体积小&#xff0c;功能全&#xff0c;使用方便&#xff0c;是一个比较轻量级的测试工具&#xff0c;使用起来非常简 单。因为 jmeter 是 java 开发的&#xff0c;所以运行的时候必须…

Tkinter_鼠标选中样式

前言 使用tkinter库创建窗口应用程序示例&#xff0c;包含不同鼠标样式标签。 一、方法 import tkinter as tkclass Mouse_Style:def __init__(self):self.root tk.Tk()self.root.title(样式)self.root.geometry("200x5201100150")self.interface()def interface(…

Hbase drop 表卡住没有响应

在实际工作中遇到过重新创建一个hbase的hive外部表&#xff0c;在 disable table_name; drop table_name 在drop table_name卡住 最后有提示报错。 建议各位查看下表有无lock的情况&#xff0c; 查看和释放hbase lock可以通过如下方式来查看 pid获取&#xff1a; 在 Ma…

使用Go 语言的三个原因

几个星期前&#xff0c;我一个朋友问我&#xff1a;“为什么要关心 Go 语言”&#xff1f; 因为他们知道我热衷于 Go 语言&#xff0c;但他们想知道为什么我认为其他人也应该关心。有三个原因&#xff1a;安全性、生产力和并发性。有些语言可以涵盖一个也有可能是两个方面&…