栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

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

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;


@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;


@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;


@RestController
@RequestMapping("/provider")
public class ProviderController {

    @Autowired
    private IRabbitmqService rabbitmqService;


    
    @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;


@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, 没有保证消息幂等性等问题. 只是将消费者和提供者分在了不同的项目里

 

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

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

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