RabbitMQ 消息提供者和消息消费者分在两个项目

两个项目中配置相同的 rabbitmq 主机, 在application.propertes文件中配置

#rabbitmq
# 配置虚拟机
spring.rabbitmq.virtual-host=/
# 开启消息确认机制 confirm 异步
spring.rabbitmq.publisher-confirm-type=correlated
# 之前的旧版本 开启消息确认机制的方式
# spring.rabbitmq.publisher-confirms=true
# 开启return机制
spring.rabbitmq.publisher-returns=true
# 消息开启手动确认
spring.rabbitmq.listener.direct.acknowledge-mode=auto
spring.rabbitmq.listener.simple.acknowledge-mode=auto
spring.rabbitmq.host=192.168.0.107
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=admin

1. 消息提供者项目 boot-rabbitmq-provider

RabbitmqConfig.java 配置类

package com.hejjon.rabbitmq.config;

import org.springframework.amqp.core.Queue;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;

/**
 * @author: caoshi
 * @date: 2022/5/23 17:00
 */
@SpringBootConfiguration
public class RabbitmqConfig {

    // 配置一个工作模型队列
    @Bean
    public Queue queueWork1() {
        return new Queue("queue_work");
    }


}

发送消息的业务 RabbitmqServiceImpl.java

package com.hejjon.rabbitmq.service.impl;

import com.hejjon.rabbitmq.service.IRabbitmqService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * @author: caoshi
 * @date: 2022/5/23 17:04
 */
@Service
public class RabbitmqServiceImpl implements IRabbitmqService {

    private static Logger logger = LoggerFactory.getLogger(RabbitmqServiceImpl.class);

    @Resource
    private RabbitTemplate rabbitTemplate;


    @Override
    public void sendwork() {
        logger.info("消息提供者开始发送消息...");
        for (int i = 0; i < 10; i++) {
            rabbitTemplate.convertAndSend("queue_work", "测试work模型的消息内容..." + i);
        }
    }
}

controller层触发 发消息

package com.hejjon.rabbitmq.controller;

import com.hejjon.rabbitmq.service.IRabbitmqService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author: caoshi
 * @date: 2022/5/23 16:51
 */
@RestController
@RequestMapping("/provider")
public class ProviderController {

    @Autowired
    private IRabbitmqService rabbitmqService;


    /**
     * 触发消息提供者发送消息
     * @return
     */
    @GetMapping("/sendWork")
    public String sendWork() {
        rabbitmqService.sendwork();
        return "success";
    }


}

2. 消息消费者项目 boot-rabbitmq-consumer

写一个监听器类 WorkReceiveListener.java

package com.hejjon.listener;

import com.rabbitmq.client.Channel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * @author: caoshi
 * @date: 2022/5/24 8:53
 */
@Component
public class WorkReceiveListener {


    private static Logger logger = LoggerFactory.getLogger(WorkReceiveListener.class);

    @RabbitListener(queues = {"queue_work"})
    public void receiveMessage(String msg, Channel channel, Message message) {
        logger.info("{}", msg);
    }


}

至此代码编写完成

测试触发消息提供者发送消息, 消息消费者可以接收到消息 .

注意: 这仅仅是测试demo, 没有保证消息幂等性等问题. 只是将消费者和提供者分在了不同的项目里

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值