RabbitMQ的简单模式+队列监听+kafaka实际应用场景

本文对比了多种消息队列系统如ActiveMQ、Kafka、ZeroMQ等,探讨了各自的适用场景及优缺点。重点介绍了RabbitMQ的使用方法,包括环境配置、依赖引入、提供方与消费者代码实现,以及消息发送与接收流程。
摘要由CSDN通过智能技术生成

rabbitMQ使用的amqp协议 支持多语言
还有目前比较火的activemq kafaka zeromq
active因为是jms支持的只能使用java语言 不灵活
kafka支持多吞吐 多用在日志上
aeromq有人说是最快的消息队列 物极必反 既然很快就不稳定

kafka的的实际应用

kafka多用在大数据方面 实际开发中昨日之中间件的也比较多
因为每个操作都需要添加日志 在添加日志的过程不能影响正常的核心业务
在这里插入代码片在这里插入图片描述

rabbitMQ

rabbitMQ的服务器时使用的erlang语言编写的 所以在使用rabbitMQ的时候要在本地上配置erlang的环境变量 网上有很多的教程

		<dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>版本自己选择</version>
        </dependency>
//提供方代码 导入的两个rabbit的包 
//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
	    factory.setHost("localhost");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//发送消息
channel.basicPublish("", "通道名称", null, "消息内容");
//将通道和链接关闭
channel.close(),
connction.close()
//消费者代码 前半部分跟提供方相同 不需要做更改 使用QueueingConsumer 做队列的监听
//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
	    factory.setHost("localhost");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//下面是消费信息的代码 
QueueingConsumer consumer = new QueueingConsumer(channel);
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        byte[] body = delivery.getBody();
        String msg=new String(body);
        System.out.println(msg);
        //确认消息 已经收到
        channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);

QueueingConsumer consumer = new QueueingConsumer(channel);
        //监听队列
        while (true){
        channel.basicConsume(QUEUE_NAME, consumer);
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        byte[] body = delivery.getBody();
        String msg=new String(body);
        System.out.println(msg);
        //确认消息 已经收到
       channel.basicAck(delivery.getEnvelope().getDeliveryTag(),true);
//        System.out.println("消息已经收到:======"+msg);
        }



```java
//自定义消费者做监听
//创建类 继承DefaultConsumer类 重写handleDelivery
class myQueueingConsumer extends DefaultConsumer{

    public myQueueingConsumer(Channel channel) {
        super(channel);
    }

    @Override
    public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
        String msg=new String(body);
        System.out.println(msg);
    }
}

//定义链接的工厂
ConnctionFactory factory = new ConnctionFactory();
//设置参数
	    factory.setHost("localhost");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
//获取链接
Connction connction=factory.getConnction();
//创建通道
Channel channel = connction.createChannel();
//声明(创建)队列
channel.queueDeclare("自定义通道名称", false, false, false, null);
//下面是消费信息的代码 
QueueingConsumer consumer = new QueueingConsumer(channel);
        QueueingConsumer.Delivery delivery = consumer.nextDelivery();
        byte[] body = delivery.getBody();
        String msg=new String(body);
        System.out.println(msg);
        //确认消息 已经收到
        channel.basicAck(delivery.getEnvelope().getDeliveryTag(),false);
myQueueingConsumer  consumer = new myQueueingConsumer();
channel.basicConsume("通道名称",consumer);


这只是最简单的方式 还有另外的6种消息方法
后续会慢慢的发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值