RabbitMQ笔记

RabbitMQ

消息中间件:利用可靠的信息传递机制进行系统和系统直接的通讯,提供消息传递和消息的排队机制,他可以在分布式系统环境下扩展进程间的通讯。

  • 基于AMQP协议

使用docker安装

  • 拉取镜像并启动
docker pull rabbitmq:management

docker run -d --hostname myrabbit --name somerabbit -e RABBITMQ_DEFAULT_USER=zzzyuan -e RABBITMQ_DEFAULT_PASS=tl20010213 -p 15672:15672 -p 5672:5672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

#-d ##后台运行容器
#--name ##指定容器名称
#-p ##暴露服务运行的端口(15672:控制台Web端口号)
#-e 指定环境变量(RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)

RabbitMQ 的角色分类

  • none 不能访问management plugin
  • management 查看自己的相关节点信息
    • 列出自己可以通过AMQP登入的虚拟机
    • 查看自己的虚拟机节点 virtual hosts的queues,exchanges和bindings 信息
    • 查看和关闭自己的channels和connections
    • 查看有关自己的虚拟机节点virtual hosts 的统计信息。包括其他用户在这个节点virtual hosts 中的活动信息
  • policymaker
    • 包含management所有权限
    • 查看和创建自己的virtual hosts所属的policies和parameters 信息
  • monitoring
    • 包含management所有权限
    • 罗列出所有的virtual hosts ,包括不能登录的virtual hosts
    • 查看其他用户的connection 和 channels 信息
    • 查看节点级别的数据 如 clustering和memory使用情况
    • 查看所有的virtual hosts 的全局统计信息
  • administrator
    • 最高权限
    • 查看和创建,删除自己的virtual hosts
    • 查看和创建,删除 users
    • 查看创建permissions
    • 关闭所有用户的connection

java使用rabbit

依赖

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
    <version>5.10.0</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.30</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.30</version>
</dependency>

第一个demo

product
package cn.zzzyuan.rabbit;

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

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {

    public static void main(String[] args)  {
        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("39.108.10.232");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("zzzyuan");
        connectionFactory.setPassword("tl20010213");
        connectionFactory.setVirtualHost("/");

        try(  Connection connection = connectionFactory.newConnection("生产者");
        Channel channel = connection.createChannel()) {
            // 1.队列名称 2. 是否持久化 3. 排他性,是否独立 4. 是否自动删除 5. 携带附属参数
            channel.queueDeclare("queue",false,false,false,null);

            channel.basicPublish("","queue",null,"msg".getBytes());
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }


}

consume
package cn.zzzyuan.rabbit;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer {
    public static void main(String[] args)  {

        ConnectionFactory connectionFactory = new ConnectionFactory();
        connectionFactory.setHost("39.108.10.232");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("zzzyuan");
        connectionFactory.setPassword("tl20010213");
        connectionFactory.setVirtualHost("/");
        try (Connection connection = connectionFactory.newConnection("生产者");
             Channel channel = connection.createChannel()
        ){
            // 1.队列名称 2. 是否持久化 3. 排他性,是否独立 4. 是否自动删除 5. 携带附属参数
            channel.basicConsume("queue", true, new DeliverCallback() {
                @Override
                public void handle(String s, Delivery delivery) throws IOException {
                    System.out.println(new String(delivery.getBody(), "UTF-8"));
                }
            }, new CancelCallback() {
                @Override
                public void handle(String s) throws IOException {
                    System.out.println("接收失败");
                }
            });
            Thread.sleep(10000);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

springBoot整合RabbitMQ

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.amqp</groupId>
    <artifactId>spring-rabbit-test</artifactId>
</dependency>

生产者配置

yml配置

spring:
  rabbitmq:
    username: user
    password: pass
    virtual-host: /
    host: 127.0.0.1
    port: 5672
server:
  port: 8080

config 配置类

package cn.zzzyuan.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMqConfig {

    /**
     * FanoutExchange fanout 类型交换机
     * @return
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("exchangeName",true,false);
    }

    @Bean
    public Queue queue1(){
        return new Queue("queueName",true);
    }

    @Bean
    public Queue queue2(){
        return new Queue("queueName",true);
    }

    @Bean
    public Queue queue3(){
        return new Queue("queueName",true);
    }

    @Bean
    public Binding binding1(){
        return BindingBuilder.bind(queue1()).to(fanoutExchange());
    }
    @Bean
    public Binding binding2(){
        return BindingBuilder.bind(queue2()).to(fanoutExchange());
    }
    @Bean
    public Binding binding3(){
        return BindingBuilder.bind(queue3()).to(fanoutExchange());
    }
    
}

消息派发

package cn.zzzyuan.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class RabbitMqService {

    @Autowired
    private RabbitTemplate rabbitTemplate;


    public void rabbitTest(){
        rabbitTemplate.convertAndSend("exchangeName","queueName1","msg");
    }

}

消费者

yml

spring:
  rabbitmq:
    username: user
    password: pass
    virtual-host: /
    host: 127.0.0.1
    port: 5672
server:
  port: 8081

接收Service

![cow](C:\Users\86188\Downloads\cow.pngpackage cn.zzzyuan.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;

@Service
@RabbitListener(queues = {"queueName1"})
public class RabbitMqConsume {

    @RabbitHandler
    public void receiverMsg(String msg){
        System.out.println("收到消息" + msg);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杂货店的阿猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值