前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RabbitMQ学习笔记 - Docker部署

RabbitMQ学习笔记 - Docker部署

原创
作者头像
Karos
修改2023-02-01 11:31:26
7630
修改2023-02-01 11:31:26
举报
文章被收录于专栏:MyBlog-KarosMyBlog-Karos

RabbitMQ

AMQP协议(Advanced Message Queuing Protrocol) -- 高级消息队列协议、应用层

基础架构

image-20230120121647888
image-20230120121647888

RabbitMQ安装

安装过程基于Docker,Dokcer用法详见另外一篇

从RabbitMQ官网查看对应的Erlang版本

RabbitMQ Erlang Version Requirements — RabbitMQ

image-20230120083613195
image-20230120083613195
docker pull erlang:25.2
docker pull rabbitmq:3.11-manager
docker run -id erlang
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-management

查询IP: ifconfig 登录管控面板: IP:15672 账号密码均为guest

生产者&消费者

Producer -> Queue -> Consuming: send and receive messages from a named queue.
Producer -> Queue -> Consuming: send and receive messages from a named queue.
image-20230120121051847
image-20230120121051847

Demo

package org.example;
​
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
​
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
​
public class Main {
    public static void main(String[] args) throws IOException, TimeoutException {
​
        // 创建连接工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
​
        // 设置参数
        connectionFactory.setHost("192.168.131.129");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");     //默认值为guest
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/hello");
        // 创建连接 Connection
        Connection connection=connectionFactory.newConnection();
        // 创建Channel
        Channel channel = connection.createChannel();
        /**
         queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         queue 队列名称
         durable 是否持久化
         exclusive{
         是否独占,只能又一个消费者监听这个队列
         当connection close时,是否删除队列
         }
         autoDelete 当没有Consumer时是否自动删除
         */
        // 创建队列
        channel.queueDeclare("Hello",true,false,false,null);
        // send
        /**
         * String exchange      交换机名称,简单模式下使用默认的""
         * String routingKey    路由名称,如果使用默认交换机,路由名称就为channel名称
         * AMQP.BasicProperties props 配置信息
         * byte[] body          //发送消息数据
         */
        String p="Hello!";
        channel.basicPublish("","Hello",null,p.getBytes());
        //释放资源
        channel.close();
        connection.close();
        System.out.println("OK");
    }
}
package org.example;
​
import com.rabbitmq.client.*;
​
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
​
public class Main {
    public static void main(String[] args) throws IOException, TimeoutException {
​
        // 创建连接工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
​
        // 设置参数
        connectionFactory.setHost("192.168.131.129");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");     //默认值为guest
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/hello");
        // 创建连接 Connection
        Connection connection=connectionFactory.newConnection();
        // 创建Channel
        Channel channel = connection.createChannel();
        /**
         queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         queue 队列名称
         durable 是否持久化
         exclusive{
         是否独占,只能又一个消费者监听这个队列
         当connection close时,是否删除队列
         }
         autoDelete 当没有Consumer时是否自动删除
         */
        // 创建队列
        channel.queueDeclare("Hello",true,false,false,null);
        //String queue  队列名称
        // boolean autoAck  是否自动确认
        // Consumer callback 回调对象
        Consumer consumer=new DefaultConsumer(channel){
            //回调方法  ,当收到消息后自动执行
            // cisynerTag 标识
            // proerties 配置信息
            // body 数据
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(new String(body));
            }
        };
        channel.basicConsume("Hello",true,consumer);
​
​
    }
}

工作模式

WorkQueues

image-20230120182743025
image-20230120182743025

Pub/Sub订阅模式

image-20230120204828087
image-20230120204828087

Routing路由模式

image-20230120210416965
image-20230120210416965

Topic通配符模式

image-20230120211014113
image-20230120211014113

Spring整合RabbitMQ

(77条消息) SpringBoot整合RabbitMQ超级详细教程adobehu的博客-CSDN博客springboot rabbitmq

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RabbitMQ
  • 基础架构
  • RabbitMQ安装
  • 生产者&消费者
  • Demo
  • 工作模式
    • WorkQueues
      • Pub/Sub订阅模式
        • Routing路由模式
          • Topic通配符模式
      • Spring整合RabbitMQ
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档