• RabbitMQ笔记


    RabbitMQ服务

    RabbitMQ官网地址: https://www.rabbitmq.com/  下载页: https://www.rabbitmq.com/download.html

    用Docker启动RabbitMQ服务

    根据下载页上的说明

    docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3-management
    

     这样会启动一个带命令行日志, 以及web管理界面的RabbitMQ服务.

    访问 http://宿主IP:15672 就登录管理后台, 用户是 guest / guest

    添加用户, VirtualHost和授权

    点击页首的Admin标签, 点击Users可以在界面上添加用户, 其中各种Tags表示这些用户在后台的各种权限, 如果留空, 则用户仅能通过接口进行消息队列的操作

    点击Virtual Hosts, 在界面上可以添加新VirtualHost

    关于授权, 这个费了我一些时间, 界面上并没有给任何提示, 应该在Users界面, 点击用户表格里的用户名, 然后在用户的管理界面里添加.

    Spring Boot 中使用RabbitMQ

    依赖

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

    只需要添加这个就可以了

    配置

    spring:
      ...
      rabbitmq:
        addresses: 192.168.1.2:5672
        username: someone
        password: somepawd
        virtualHost: /somevirtual
    

     在spring下添加rabbitmq节点, 如果是rabbitmq是单例, 可以使用 host + port, 如果是集群, 可以用addresses, 把地址端口写一起, 然后用逗号分开

    代码

    在启动类中添加以下的Bean. 以下的代码, 会在/somevirtual下面, 创建 ex.someex这个exchange, 和 que.somequeue这个queue, 如果环境需要用现有的不允许新建, 可以将Queue, TopicExchange, Binding这三个Bean删掉.

    public class ApplicationBoot {
        public static final String topicExchangeName = "ex.someex";
        public static final String queueName = "que.somequeue";
    
        public static void main(String[] args) {
            SpringApplication.run(ApplicationBoot.class, args);
        }
    
        @Bean
        Queue queue() {
            return new Queue(queueName, true, false, true);
        }
    
        @Bean
        TopicExchange exchange() {
            return new TopicExchange(topicExchangeName);
        }
    
        @Bean
        Binding binding(Queue queue, TopicExchange exchange) {
            return BindingBuilder.bind(queue).to(exchange).with("foo.bar.#");
        }
    
        @Bean
        SimpleMessageListenerContainer container(
                ConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) {
            SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
            container.setConnectionFactory(connectionFactory);
            container.setQueueNames(queueName);
            container.setMessageListener(listenerAdapter);
            return container;
        }
    
        @Bean
        MessageListenerAdapter listenerAdapter(Receiver receiver) {
            return new MessageListenerAdapter(receiver, "receiveMessage");
        }
    }
    

    对应的消息处理

    @Component
    public class Receiver {
        private static Logger logger = LoggerFactory.getLogger(Receiver.class);
        private CountDownLatch latch = new CountDownLatch(1);
    
        public void receiveMessage(String message) {
            logger.info("Received: {}", message);
            latch.countDown();
        }
    
        public CountDownLatch getLatch() {
            return latch;
        }
    
    }
    

     对应的消息发送

    @Component
    public class Runner implements CommandLineRunner {
        private final RabbitTemplate rabbitTemplate;
        private final Receiver receiver;
    
        public Runner(Receiver receiver, RabbitTemplate rabbitTemplate) {
            this.receiver = receiver;
            this.rabbitTemplate = rabbitTemplate;
        }
    
        @Override
        public void run(String... args) throws Exception {
            System.out.println("Sending message...");
            rabbitTemplate.convertAndSend(ApplicationBoot.topicExchangeName, "foo.bar.baz", "Hello Message");
            receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
        }
    
    }
    

      

  • 相关阅读:
    hdu 4496 D-City 并查集
    hdu 1257 小希的迷宫 并查集
    HDU 3974 Assign the task 图论/线段树区间更新,单点查询
    cdoj 1070 秋实大哥打游戏 带权并查集
    NumPy 广播(Broadcast)
    NumPy 高级索引
    NumPy 切片和索引
    NumPy 从数值范围创建数组
    Wasserstein距离
    JS散度
  • 原文地址:https://www.cnblogs.com/milton/p/12488330.html
Copyright © 2020-2023  润新知