首页 > 编程知识 正文

rabbitmq docker,kafka和rabbitmq

时间:2023-05-04 09:29:36 阅读:146690 作者:4648

一、docker安装下载1、docker下载与运行rabbitmqdockerrun-d---namerabbitmq-p 567133605671-p 567233605672-p 436933

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

5672,5671 (amqp端口(服务端口) ) )。

15672(web管理后台端口) )

61613、61613 (停止协议端口) ) ) ) )。

1883,8883 (mqtt协议端口) )

2、设置开机启动的dockerupdaterabbitmq---- restart=always 3、登录管理界面URL:IP 15672

默认帐户名密码: guest

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

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

ependencygroupidorg.spring framework.boot/groupidartifactidspring-boot-starter-amqp/artifact id/dependency 2, 在application.yml或application.properties文件中,rabbitMq数据源spring: rabbitmq: #帐户username: guest #密码passssspast 的地址addresses : localhost :5672 #连接超时时间(秒),定义三个常量:连接时间输出:3、交换机和路由密钥publicinterfacerabbitmqconstant { 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.rabbit MQ; import lombok.extern.slf4j.slf4j; importorg.spring帧work.amqp.core.*; importorg.spring帧work.context.annotation.bean; importorg.spring framework.context.annotation.configuration; /** *初始化交换机和队列并将队列绑定到交换机* @ authorzhanli */@ configuration @ sl F4 jpublicclassuserqueueconfig { @ beanpublicquation } } @ beanpublicdirectexchangeusermassageexchange () log.info ) usermassageexchangeinit ); returnnewdirectexchange (rabbitmqconstant.user _ exchange; } @ beanpublicbindingqueuebindingexchange () log.info (queuebindingexchangeinit ); returnbindingbuilder.bind (usermassagequeue () ) () to (usermassageexchange ) ).with ) rabbitmqconstant.user

G_KEY); }}

5、 一个接口类 RabbitMqService: package com.sczc.modules.equipment.rabbitmq.service;/** * rabbiMq 服务接口 * @author zhanli */public interface RabbitMqService { /** * 统一发送mq * @param exchange 交换机 * @param routingKey 路由key * @param data 数据 */ 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;/** * rabbitmq服务 * @author zhanli */@Servicepublic 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、测试类

@SpringBootTestclass RabbitMqServiceImplTest { @Autowired private RabbitMqService rabbitMqService; @Test public void sendTest() { Map<String,Object> user = new HashMap<>(); user.put("name", "rrdzxc"); 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; /** * rabbitMq 消费者 * @author zhanli */ @Component@Slf4jpublic 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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。