RabbitMQ整合SpringBoot

包结构

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

生产者配置文件:

#端口号
server:
  port: 8080

spring:
  rabbitmq:
    username: admin
    password: admin
    #虚拟主机   默认为 /
    virtual-host: /
    host: 192.168.xxx.xxx
    port: xxxx

消费者配置文件:

配置文件

#端口号
server:
  port: 8848

spring:
  rabbitmq:
    username: admin
    password: admin
    #虚拟主机   默认为 /
    virtual-host: /
    host: 192.168.xxx.xxx
    port: xxxx

RabbitMQSpringBoot的整合中 我们选择使用配置类的方法来把交换机和队列 创建出来

这个配置类可以放在 生产者中 也可以放在消费者里面 当然 如果你想保险一点也可以都写上一个配置类

我习惯把配置类写在消费者中 下面我就把代码放上

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfiguration {
    //1.创建交换机
    @Bean
    public DirectExchange directExchange(){
        return new DirectExchange("order_system_exchange",true,false);
    }
    //2.创建队列
    //商家队列
    @Bean
    public Queue queueBusiness(){
        return new Queue("queue.business",true);
    }
    //订单系统队列
    @Bean
    public Queue queueOrder(){
        return new Queue("queue.order",true);
    }
    //3.交换机绑定队列
    //绑定商家队列
    @Bean
    public Binding busBinding(){
        return BindingBuilder.bind(queueBusiness()).to(directExchange()).with("bus");
    }
	//绑定订单系统队列
    @Bean
    public Binding ordertBinding(){
        return BindingBuilder.bind(queueOrder()).to(directExchange()).with("order");
    }

}

生产者

@Service
public class OrderService {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void creatorder(OrderCreateVO orderCreateVO){
        //向消息队列发送消息
        //订单消息
        //创建一个用于传递信息的对象
        OrderMessageDTO orderMessageDTO = new OrderMessageDTO();
        //订单的id
        orderMessageDTO.setOrderId(orderPO.getId());
        //商品的id
        orderMessageDTO.setProductId(orderPO.getProductId());
        //用户id
        orderMessageDTO.setAccountId(orderCreateVO.getAccountId());
        //交换机
        String eachangeName = "order_system_exchange";
        //路由
        String routingKey = "bus";
        //发送消息
        String s = JSON.toJSONString(orderMessageDTO);//转为JOSN
        rabbitTemplate.convertAndSend(eachangeName,routingKey,s);
        System.out.println("发送消息-----------------------》");
    }
}

消费者

@Service
@RabbitListener(queues = "queue.business")
public class OrderMessagesService {

    ObjectMapper objectMapper = new ObjectMapper();
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RabbitHandler
    public void reviceMessages(String message) throws JsonProcessingException {
        System.out.println("商家收到消息----------->"+message);
        //把收到的消息(json)转成对象
        OrderMessageDTO orderMessageDTO = objectMapper.readValue(message, OrderMessageDTO.class);
        //查询商品是否可用
        
        //查询商家是否还营业
        
        //判断商品是否可用&判断商家是否还在营业
        
        //把响应消息发送给订单系统
        //交换机
        String eachangeName = "order_system_exchange";
        //路由
        String routingKey = "order";
        rabbitTemplate.convertAndSend(eachangeName,routingKey,"商家返回消息");
    }
}

上面两个类就是 生产者把一个订单的消息发送给商家 商家确认以后再把确认以后的消息传给订单系统

订单系统接收商家发送的消息

@Service
@RabbitListener(queues = "queue.order")
public class BusinessMessageService {
    @RabbitHandler
    public void BusinessMessage(String message){
        System.out.println("----------->"+message);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值