ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RabbitMQ笔记

2020-03-13 19:05:39  阅读:259  来源: 互联网

标签:container rabbitmq Bean 笔记 receiver RabbitMQ public


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);
    }

}

  

 

标签:container,rabbitmq,Bean,笔记,receiver,RabbitMQ,public
来源: https://www.cnblogs.com/milton/p/12488330.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有