首页 > 其他分享 >Rabbitmq消息队列:Publish/Subscribe模式简单应用

Rabbitmq消息队列:Publish/Subscribe模式简单应用

时间:2023-11-03 09:11:18浏览次数:51  
标签:String Publish Subscribe 交换机 static Rabbitmq import public channel

一、生产者

package test.publish;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import utils.RabbitmqConUtil;

public class Give {

    //定义交换机
    private final static String EXCHANGE = "test-publish";

    public static void main(String[] args) throws Exception {
        //创建连接和通道
        Connection connection = RabbitmqConUtil.getConnection();
        Channel channel = connection.createChannel();
        //声明交换机(类型fanout->发布订阅模式)
        channel.exchangeDeclare(EXCHANGE,"fanout");
        //发送消息到交换机(交换机无法持久化,如果消息没有及时接收,重启后容易丢失数据)
        channel.basicPublish(EXCHANGE,"",null,"统一发布订阅消息".getBytes());
    }

}

  创建连接和通道后,声明要用到的交换机,并发送消息到交换机中。

  交换机无法持久化,所以一旦停机重启的话,消息就会丢失。

  注:生产者要提前运行一次,初始化交换机的存在,否则如果先启动消费者的话就会造成报交换机不存在的错误。初始化交换机的过程中,不需要带发送消息的操作。

二、消费者

  创建两个消费者GetOne和GetTwo,GetOne的内容大致如下:

package test.publish;

import com.rabbitmq.client.*;
import utils.RabbitmqConUtil;

import java.io.IOException;

public class GetOne {

    private final static String EXCHANGE = "test-publish";
    //定义本消费者需要用到的队列
    private final static String QUEUE = "test-publish-one";

    public static void main(String[] args) throws Exception{
        Connection connection = RabbitmqConUtil.getConnection();
        final Channel channel = connection.createChannel();
        //声明队列
        channel.queueDeclare(QUEUE,false,false,false,null);
        //将队列绑定到交换机
        channel.queueBind(QUEUE,EXCHANGE,"");
        channel.basicQos(1);
        DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                String str = new String(body);
                System.out.println("GetOne接收:" + str);
                channel.basicAck(envelope.getDeliveryTag(),false);
            }
        };
        channel.basicConsume(QUEUE,false,defaultConsumer);

    }
}

  GetTwo的内容与上面一样,更换个名字以便区分两个消费者。

三、运行结果

  先启动一次生产者,把交换机初始化,避免消费者启动接收消息报错(也可以在web管理端自己手动添加,这样就避免初始化了)。

  

  然后,先后启动GetOne和GetTwo两个消费者,将两个队列绑定在交换机上。

  

  最后再重启生产者,发送消息,两个消费者结果如下:

  

  

   都接收到了统一发布的消息。

 

标签:String,Publish,Subscribe,交换机,static,Rabbitmq,import,public,channel
From: https://www.cnblogs.com/guobin-/p/17805899.html

相关文章

  • Rabbitmq消息队列:Work模式简单应用
    一、生产者直接使用HelloWorld模式下的应用案例依赖和代码,将生产者Give类拷贝一份。将发送消息部分调整为遍历发送,连发10次://遍历发送多条消息for(inti=0;i<10;i++){//发送内容channel.basicPublish("",QUEUE,null,("这是第"+(i+1)+"条消息")......
  • linux 安装rabbitmq流程记录
    Linux系统:CentOS7.x(如果是CentOS8.x的话,需要修改下面两个环境版本号中的el7为el8)Erlang:erlang-22.3.4.12-1.el7.x86_64.rpmRabbitMQ:rabbitmq-server-3.8.13-1.el7.noarch.rpm1安装erlangLinux系统:CentOS7.x(如果是CentOS8.x的话,需要修改下面两个环境版本号中的el7为el8......
  • RabbitMQ安装——window10 64位
    一、下载并安装erlang环境  RabbitMQ是由erlang编程语言开发的消息队列,因此需要在电脑上安装erlang的环境。1、官网下载erlang环境在RabbitMQ的最新版本详情页面RabbitMQ Project Announcements — RabbitMQ查看最新版本支持的erlang环境,目前支持erlang的版本号为OTP25.x......
  • RabbitMQ教程
    1.同步通讯和异步通信(1)同步通信另外,有服务停机时,影响其他服务的调用,级联失败 问题: (2)异步调用 优势一:服务解耦 ,现在只需要订阅事件即可 优势二:性能提升,吞吐量提高,完成一个订单任务,只需要支付服务执行消耗即可优势三:服务没有强依赖,不担心级联失败问题优势四:流量削峰 ,服务请求......
  • rabbitmq Could not find handle.exe, please install from sysinternals
    报错:Couldnotfindhandle.exe,pleaseinstallfromsysinternals这是由于rabbitmq调用windows系统中handle.exe,但是handle.exe缺失而导致的错误。 解决方案:下载 https://learn.microsoft.com/en-us/sysinternals/downloads/handle完成后,安装handle.exe,接着重启rabbitm......
  • RabbitMQ 插件控制界面
    目录overviewConnectionsChannelsExchanges交换机Queuesadmin大佬文章,请优先查看!!!RabbitMQ控制界面详解overviewConnectionsChannelsExchanges交换机Queuesadmin......
  • 在CI/CD发布流水线中,使用dotnet publish命令编译.NET Core C#代码
    在搭建CI/CD发布流水线(例如Jenkins流水线)发布.NETCore项目时,我们需要在流水线中使用dotnetpublish命令来编译C#代码来生成DLL文件。参考dotnetpublish官方文档。其中这里有说到,dotnetpublish命令会隐式调用dotnetrestore命令来还原nuget包,所以调用dotnetpublish之前不用显......
  • Alertmanager Rabbitmq告警规则
    下载rabbitmq_exporter-0.29.0.linux-amd64.tar.gz这个包,下载地址:https://github.com/kbudde/rabbitmq_exporter/releasestarxfrabbitmq_exporter-0.29.0.linux-amd64.tar.gz-C/opt/cd/opt/rabbitmq_exporter-0.29.0.linux-amd64启动命令就1行:RABBIT_USER=guest......
  • flask整合rabbitMQ插件的方式
    文章目录二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1安装依赖:2编写实体类:3编写消费者和生产者:4初始化消费者和生产者:5其他地方使用生产者二、Python-flask-rabbitMQ-插件方式整合引言当今互联网应用的高并发场景下,如何保证可靠的消息传递和高效的处理成为了一项重......
  • windows安装rabbitMq
    这里安装的版本为erlang: V12.3rabbitMq:3.10.18注意:需要找对应的版本 下载与安装erlang原因:RabbitMQ服务端代码是使用并发式语言Erlang编写的,安装RabbitMQ的前提是安装Erlang。下载地址:http://www.erlang.org/downloads  这里的otp显示26.1.2   双击启动,点n......