美文网首页
客户端连接 ~ 消息中间件之四

客户端连接 ~ 消息中间件之四

作者: 喏喏2021 | 来源:发表于2022-01-26 10:59 被阅读0次

1. 我们先增加一个帐号

添加root帐号,用户名、密码都为root

rabbitmqctl add_user root root

设置一下主题权限

set_permissions -p / root ".*" ".*" ".*"

设置一下用户角色

rabbitmqctl set_user_tags root administrator

2. 引用maven依赖

这里我们使用rabbitmq的客户端试试看

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

3. 消息发送

发送的代码
public class ClientTest {
    private static final String EXCHANGE_NAME = "exchange_basic";
    private static final String ROUTING_KEY = "routingkey_basic";
    private static final String QUEUE_NAME = "queue_basic";
    private static final int PORT = 5672;
    
    public static void main(String[] args) throws IOException, TimeoutException {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(PORT);
        factory.setUsername("root");
        factory.setPassword("root");
        //创建连接
        Connection conn = factory.newConnection();
        //创建信道
        Channel channel = conn.createChannel();
        //创建一个direct类型,持久化、非自动删除的交换器
        channel.exchangeDeclare(EXCHANGE_NAME, "direct",true, false, null);
        //创建一个持久化、非排他的、非自动删除的队列
        channel.queueDeclare(QUEUE_NAME, true, false, false, null);
        //将交换器与队列通过路由器绑定
        channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, ROUTING_KEY);
        //发送一条消息
        String message = "你好!";
        channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, MessageProperties.PERSISTENT_TEXT_PLAIN, message.getBytes());
        //关闭
        channel.close();
        conn.close();
    }
}
路由查看

上面代码执行后,在管理页面的exchanges标签页,我们可以看到路由已经成功创建,并发送了一条消息


路由情况.png
队列查看

切换到Queues标签,可以看到队列的详细情况


队列情况.png

4. 接收消息

下面是接收的代码哈,放在刚才的类下,直接调用一下就好了哈

public static void receive() throws IOException, TimeoutException, InterruptedException {
        Address[] addresses = new Address[] {
                new Address("localhost",PORT)
        };
        ConnectionFactory factory = new ConnectionFactory();
        factory.setUsername("root");
        factory.setPassword("root");
        Connection conn = factory.newConnection(addresses);
        final Channel channel = conn.createChannel(); 
        Consumer consumer = new DefaultConsumer(channel) {  

            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
                    throws IOException {
                System.out.println("收到消息:" + new String(body));
                channel.basicAck(envelope.getDeliveryTag(), false);
            }
            
        };
        channel.basicConsume(QUEUE_NAME, consumer);
        TimeUnit.SECONDS.sleep(5);
        channel.close();
        conn.close();
    }
执行消费代码后,可以看消息成功消费了
消息成功消费.png

相关文章

  • 客户端连接 ~ 消息中间件之四

    1. 我们先增加一个帐号 添加root帐号,用户名、密码都为root 设置一下主题权限 设置一下用户角色 2. ...

  • ActiveMQ源码解析(一)建立连接

    作为一个消息中间件,有客户端和服务端两部分代码,这次的源码解析系列主要从客户端的代码入手,分成建立连接、消息发送、...

  • AMQP高级消息队列协议

    AMQP高级消息队列协议 目的: amqp出现之前,有很多的消息中间件,各个消息中间件的接口协议不一样,客户端需要...

  • 消息中间件介绍

    文章大纲 一、什么是消息中间件二、消息中间件组成三、消息队列的的传输模式四、消息中间件的优势五、消息中间件应用场景...

  • NSQ学习:流控的实现

    消息中间件的pull与push 消息中间件的实现无非两种套路,一种让客户端pull,典型的比如kafka便是如此,...

  • RabbitMQ基础学习(php)

    RabbitMQ:简单的消息中间件使用总结 1.消息发布步骤: 建立连接:$connection = new AM...

  • 避免消息重复消费

    前言:消息中间件 是用来 客户端 与 客户端之间通信的,那么就存在以下两个问题: 如何避免消息重复消费(针对con...

  • 消息100%投递的两种方案

    前言:消息中间件 是用来 客户端 与 客户端之间通信的,那么就存在以下两个问题: 如何避免消息重复消费(针对con...

  • 消息中间件的模型总结

    推拉模型 首先推拉模型是针对 消息中间件的实现和策略,而非客户端及调用方。 推模型: 是有中间件将消息主动推送给...

  • RabbitMQ学习:安装RabbitMQ及RabbitMQ的初

    RabbitMQ基础含义 RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入...

网友评论

      本文标题:客户端连接 ~ 消息中间件之四

      本文链接:https://www.haomeiwen.com/subject/naxnhrtx.html