栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker安装rabbitmq及使用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker安装rabbitmq及使用

一、docker安装下载 1、docker下载并运行rabbitmq
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 25672:25672 -p 15671:15671 -p 15672:15672 rabbitmq:management

注:

4369, 25672 (Erlang发现&集群端口)

5672, 5671 (AMQP端口[服务端口])

15672 (web管理后台端口)

61613, 61614 (STOMP协议端口)

1883, 8883 (MQTT协议端口)

2、设置开机启动
docker update rabbitmq --restart=always
3、登录管理界面

URL:IP+15672

默认账号名密码:guest

二、java项目中使用 1、 首先 pom.xml 文件引入 rabbitMq 依赖。

自行查找合适的版本:spring-boot-starter-amqp

         
    org.springframework.boot         
    spring-boot-starter-amqp     
2、在 application.yml 或 application.properties 文件配置 rabbitMq的数据源
spring:   
    rabbitmq:     
        #账号     
        username: guest     
        #密码     
        password: guest     
        #地址     
        addresses: localhost:5672     
        #连接超时时间(秒)     
        connection-timeout: 3
3、定义三个常量:交换机,路由key,队列名
public interface RabbitMqConstant {

    String USER_EXCHANGE = "user_exchange";
    String USER_ROUTING_KEY = "user_routing_key";
    String USER_QUEUE = "user_queue";
}
4、创建配置初始化类

这里创建一个队列配置初始化类: UserQueueConfig 。项目启动时会同时创建 交换机和队列,如该交换机或队列存在则不会创建。在提测或环境移植时,可减少手动或忘记创建带来的麻烦。

如果不想交换机和队列通过 routing_key 绑定在一起,可以将常量 USER_ROUTING_KEY 的值设为 "" (空字符串)。

package com.sczc.modules.equipment.rabbitmq;

import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
@Slf4j
public class UserQueueConfig {

    @Bean
    public Queue userMassageQueue() {
        log.info("userMassageQueue init");
        return new Queue(RabbitMqConstant.USER_QUEUE);
    }

    @Bean
    public DirectExchange userMassageExchange() {
        log.info("userMassageExchange init");
        return new DirectExchange(RabbitMqConstant.USER_EXCHANGE);
    }

    @Bean
    public Binding queueBindingExchange() {log.info("queueBindingExchange init");
        return BindingBuilder.bind(userMassageQueue())
                .to(userMassageExchange())
                .with(RabbitMqConstant.USER_ROUTING_KEY);
    }
}

5、 一个接口类 RabbitMqService:
package com.sczc.modules.equipment.rabbitmq.service;


public interface RabbitMqService {

    
    void send(String exchange, String routingKey, Object data);
}
6、 一个实现类 RabbitMqServiceImpl:
package com.sczc.modules.equipment.rabbitmq.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.sczc.modules.equipment.rabbitmq.service.RabbitMqService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


@Service
public class RabbitMqServiceImpl implements RabbitMqService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    @Override
    public void send(String exchange, String routingKey, Object data) {
        rabbitTemplate.convertAndSend(exchange, routingKey, JSONObject.toJSonString(data));
    }
}

7、测试类

@SpringBootTest
class RabbitMqServiceImplTest {
 
    @Autowired
    private RabbitMqService rabbitMqService;
 
    @Test
    public void sendTest() {
 
        Map user = new HashMap<>();
        user.put("name", "张三");
        user.put("age", 18);
        user.put("course", "Java RabbitMq");
 
        rabbitMqService.send(RabbitMqConstant.USER_EXCHANGE, RabbitMqConstant.USER_ROUTING_KEY, user);
    }
}
8、 RabbitMq 后台查看

在 RabbitMq 后台可以看到已经创建了:user_exchange 和 user_queue ,且两者有绑定关系,队列里面也接收到的 json 数据。

9、创建消费者

最后写一个消费者 UserConsumer, 加入 Component 注释后,项目启动时即可自动开始消费。

消息可在发送时,使用构建好的实体类或DTO,消费时直接解析成生产时的实体类或DTO更加方便,再做相应的逻辑操作。

import com.alibaba.fastjson.JSONObject;
import com.demo.www.constant.RabbitMqConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
 
import java.util.Map;
 

 
@Component
@Slf4j
public class UserConsumer {
 
    @RabbitListener(bindings = @QueueBinding(
            value = @Queue(value = RabbitMqConstant.USER_QUEUE, durable = "true"),
            exchange = @Exchange(value = RabbitMqConstant.USER_EXCHANGE)
    ))
    public void onMassageUser(Message message) {
        log.info("-------开始消费-------");
        Map map = JSONObject.parseObject(new String(message.getBody()), Map.class);
        log.info("姓名:{},年龄:{}, 课程:{}", map.get("name"), map.get("age"), map.get("course"));
        log.info("-------消费完成-------");
    }
}

10、控制台输出

借鉴原作者出处:Docker中安装rabbitmq并运行 - WlliamLiu - 博客园 (cnblogs.com)

Java 简单操作 RabbitMq - 安逺 - 博客园 (cnblogs.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/308850.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号