RabbitMQ:hello结构

这篇具有很好参考价值的文章主要介绍了RabbitMQ:hello结构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式 

1.在Linux环境上面装入rabbitMQ

doker-compose.yml

version: "3.1"
services:
  rabbitmq:
    image: daocloud.io/library/rabbitmq:management
    restart: always
    container_name: rabbitmq
    ports:
      - 6786:5672
      - 16786:15672
    volumes:
      - ./data:/var/lib/rabbitmq

doker-compose up -d 运行

2.进入rabbitMQ提供的客户端路径

自己的路径,和客户端端口号

RabbitMQ Management

http://8.140.244.227:   16786

3.在客户端注册虚拟主机

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

4.创建角色

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

5.给角色绑定虚拟主机 

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式 RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

6.导入RabbitMQ依赖 

        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.6.0</version>
        </dependency>

7.写个工具类,获取连接

package com.qf.springbootRbMQ.utils;

import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class MQUtils {

    public static Connection getConnection() throws Exception {
        //创建连接工厂对象
        ConnectionFactory connectionFactory = new ConnectionFactory();

        //设置MQ服务器的相关信息
        connectionFactory.setHost("8.140.244.227");
        connectionFactory.setPort(6786);//注意:不要写成管理工具的端口号
        connectionFactory.setUsername("root");
        connectionFactory.setPassword("1234");
        connectionFactory.setVirtualHost("/email");//设置虚拟主机

        Connection connection = connectionFactory.newConnection();

        return connection;
    }


}

8.写提供者类Send

package com.qf.springbootRbMQ.email;

import com.qf.springbootRbMQ.entity.EmailMessage;
import com.qf.springbootRbMQ.utils.MQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import org.springframework.util.SerializationUtils;

public class Send {
    //队列的名字
    public static final String QUEUE_NAME="QQEmail";

    public static void main(String[] args) throws Exception {

        //1.获取连接对象
        Connection conn = MQUtils.getConnection();

        //2. 创建一个channel对象,对于MQ的大部分操作,都定义在了channel对象上
        Channel channel = conn.createChannel();

        //3.声明了一个队列
        /**
         * queue – the name of the queue
         * durable – true代表创建的队列是持久化的(当mq重启后,该对立依然存在)
         * exclusive – 该队列是不是排他的 (该对列是否只能由当前创建该队列的连接使用)
         * autoDelete – 该队列是否可以被mq服务器自动删除
         * arguments – 队列的其他参数,可以为null
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);


        EmailMessage emailMessage = new EmailMessage();

        emailMessage.setQq("1393087444@QQ.com");
        emailMessage.setSubject("你好啊,又见面了,发送邮箱给你啊!!!");
        emailMessage.setText("<p style='color:green'>谢谢你看我的邮件啦啦啦~~~</p>");

        byte[] bytes = SerializationUtils.serialize(emailMessage);
        //生产者如何发送消息,使用下面的方法即可
        /**
         * exchange – 交换机的名字 ,如果是空串,说明是把消息发给了默认交换机
         * routingKey – 路由的key,当发送消息给默认交换机时,routingkey代表队列的名字
         * other properties - 消息的其他属性,可以为null
         * body – 消息的内容,注意,要是有 字节数组
         */
        channel.basicPublish("", QUEUE_NAME, null, bytes);
        System.out.println(" [x] Sent '" + emailMessage + "'");

        //关闭资源
        channel.close();
        conn.close();
    }
}

9.写消费者类Recv

package com.qf.springbootRbMQ.email;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import com.qf.springbootRbMQ.entity.EmailMessage;
import com.qf.springbootRbMQ.utils.MQUtils;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DeliverCallback;
import com.rabbitmq.client.Delivery;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;
import org.springframework.util.SerializationUtils;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.IOException;

public class Recv {



    private  final  static  String QUEUE_NAME="QQEmail";

    public static void custormer() throws Exception {
        //1.获取连接对象
        Connection conn = MQUtils.getConnection();

        //2. 创建一个channel对象,对于MQ的大部分操作,都定义在了channel对象上
        Channel channel = conn.createChannel();

        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //3.该消费者收到消息之后的处理逻辑,写在DeliverCallback对象中
        DeliverCallback deliverCallback =new DeliverCallback() {
            @Override
            public void handle(String consumerTag, Delivery message) throws IOException {
               //这个相当于标识,消费者的ID
                System.out.println(consumerTag);
                //从Delivery对象中可以获取到生产者,发送的消息的字节数组
                byte[] body = message.getBody();
                EmailMessage emailMessage = (EmailMessage) SerializationUtils.deserialize(body);
                System.out.println(emailMessage);
                //在这里写消费者的业务逻辑,例如,发送邮件
                MailAccount account = new MailAccount();
                account.setHost("smtp.qq.com"); // 设置SMTP服务器地址
                account.setPort(25); // 设置SMTP服务器端口
                account.setAuth(true); // 设置是否需要身份认证
                account.setFrom("1393087444@qq.com"); // 设置发件人邮箱地址
                account.setUser("1393087444@qq.com"); // 设置用户名
                account.setPass("gqrjqpilpadcjbdi"); // 设置密码

                // 发送邮件
                MailUtil.send(account, CollUtil.newArrayList("1393087444@qq.com"),emailMessage.getSubject(),emailMessage.getText(),false);


            }
        };

        //4.让当前消费者开始消费(QUEUE_NAME)队列中的消息
        /**
         * queue – the name of the queue
         * autoAck – true 代表当前消费者是不是自动确认模式。true代表自动确认。
         * deliverCallback – 当有消息发送给该消费者时,消费者如何处理消息的逻辑
         * cancelCallback – 当消费者被取消掉时,如果要执行代码,写到这里
         */
        channel.basicConsume(QUEUE_NAME,true,deliverCallback,consumerTag -> {});


    }

    public static void main(String[] args) throws Exception {
        custormer();
    }
}

10.发送提供者,建立连接消息队列,将信息放入消息队列中

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

11.运行消费者接收消息,并处理消息 

RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式

 RabbitMQ:hello结构,RabbitMQ,rabbitmq,linux,分布式文章来源地址https://www.toymoban.com/news/detail-708801.html

到了这里,关于RabbitMQ:hello结构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

    分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或

    2024年04月23日
    浏览(46)
  • 分布式消息队列:Kafka vs RabbitMQ vs ActiveMQ

    在现代分布式系统中,消息队列是一种常见的异步通信模式,它可以帮助系统处理高并发、高可用性以及容错等问题。在这篇文章中,我们将深入探讨三种流行的分布式消息队列:Apache Kafka、RabbitMQ和ActiveMQ。我们将讨论它们的核心概念、算法原理、特点以及使用场景。 随着

    2024年02月02日
    浏览(61)
  • Python爬虫分布式架构 - Redis/RabbitMQ工作流程介绍

    在大规模数据采集和处理任务中,使用分布式架构可以提高效率和可扩展性。本文将介绍Python爬虫分布式架构中常用的消息队列工具Redis和RabbitMQ的工作流程,帮助你理解分布式爬虫的原理和应用。 为什么需要分布式架构? 在数据采集任务中,单机爬虫可能面临性能瓶颈和资

    2024年02月11日
    浏览(41)
  • 微服务学习:SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    目录 一、高级篇 二、面试篇 ==============实用篇============== day05-Elasticsearch01 1.初识elasticsearch 1.4.安装es、kibana 1.4.1.部署单点es 1.4.2.部署kibana 1.4.3.安装IK分词器 1.4.4.总结 2.索引库操作 2.1.mapping映射属性 2.2.索引库的CRUD 2.2.1.创建索引库和映射 2.2.2.查询索引库 2.2.3.修改索引库 2.

    2024年02月02日
    浏览(57)
  • (黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 聚合 可以让我们极其方便

    2024年03月12日
    浏览(54)
  • 分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署(商城4)

    1、全文搜索 Elastic search可以用于实现全文搜索功能,例如商城中对商品搜索、搜索、分类搜索、订单搜索、客户搜索等。它支持复杂的查询语句、中文分词、近似搜索等功能,可以快速地搜索并返回匹配的结果。 2、日志分析 Elastic search可以用于实现实时日志分析,例

    2024年02月04日
    浏览(48)
  • 分布式 SpringCloudAlibaba、Feign与RabbitMQ实现MySQL到ES数据同步

    本文参考黑马 分布式Elastic search Elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 同步调用 方案一:同步调用 基本步骤如下: hotel-demo对外提供接口,用来修改elasticsearch中的数据 酒店管理服务在完成数据库操

    2024年04月11日
    浏览(45)
  • 【103期】RabbitMQ 实现多系统间的分布式事务,保证数据一致性

    org.springframework.boot spring-boot-starter-amqp mysql mysql-connector-java runtime org.projectlombok lombok true org.springframework.boot spring-boot-starter-jdbc com.alibaba fastjson 1.2.17 3.2.1.2配置文件内容: server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/test?useUnicode=tru

    2024年04月14日
    浏览(64)
  • (黑马出品_高级篇_04)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

    [此文档是在心向阳光的天域的博客加了一些有助于自己的知识体系,也欢迎大家关注这个大佬的博客](https://blog.csdn.net/sinat_38316216/category_12263516.html) [是这个视频](https://www.bilibili.com/video/BV1LQ4y127n4/?p=5spm_id_from=pageDrivervd_source=9beb0a2f0cec6f01c2433a881b54152c) 消息队列在使用过程中,面

    2024年03月19日
    浏览(46)
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

    我们发现在微服务中有一个令人头疼的问题——部署,用Docker去解决这个部署难题 1、项目部署的问题 2、Docker 扔到一台机器上,它们的依赖难道没有干扰吗?不会,docker将打包好的程序放到一个隔离容器去运行,使用沙箱机制,避免互相干扰,之间不可见,这样就解决了混

    2023年04月24日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包