RabbitMQ应用2

RabbitMQ应用2

一.实际业务逻辑

订单系统中使用MQ(不写订单系统逻辑)

1.项目的创建和准备

  1. 先把空项目创建好
  2. 在空项目中创建其他的spring项目
  1. 创建新的spring项目在这个空项目中
  2. 项目创建好会出现一个文件包
  3. 有些情况下需要手动添加Maven
  4. 在里面选择Maven后,项目就能够使用XML配置文件了

2.代码实现

Controller

java 复制代码
package com.example.orderservice.controller;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.UUID;

@RequestMapping("/order")
@RestController
public class OrderController {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/create")
    public String create() {
        String orderId = UUID.randomUUID().toString();
        rabbitTemplate.convertAndSend("","order.create","订单信息,订单ID: " + orderId);
        return "ok";
    }
}

Configuration

java 复制代码
package com.example.orderservice.config;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.amqp.core.QueueBuilder;


@Configuration
public class RabbitMQConfig {

    @Bean("orderQueue")
    public Queue orderQueue() {
        return QueueBuilder.durable("order.create").build();
    }
}

properties

java 复制代码
spring.application.name=orderservice
spring.rabbitmq.addresses=amqp://账号:密码@IP:端口号/虚拟机

二.物流系统使用MQ(不实现物流系统业务)

1.项目创建同订单(一样)

2.代码实现

properties

java 复制代码
spring.application.name=logistics
server.port=9090
spring.rabbitmq.addresses=amqp://账号:密码@IP:端口号/虚拟机

Listener

java 复制代码
package com.example.logistics.listener;

import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class OrderListener {
    @RabbitListener(queues = "order.create")
    public void handMessage(String orderInfo) {
        System.out.println("接收到订单消息: " + orderInfo);
    }
}

使用对象来发送接收消息

生产者(订单)代码

Controller

java 复制代码
@RequestMapping("/order")
@RestController
public class OrderController {
    @Autowired
    private RabbitTemplate rabbitTemplate;

    @RequestMapping("/create")
    public String create() {
        String orderId = UUID.randomUUID().toString();
        rabbitTemplate.convertAndSend("","order.create","订单信息,订单ID: " + orderId);
        return "ok";
    }


    @RequestMapping("/create2")
    public String create2() {
        OrderInfo orderInfo = new OrderInfo();
        orderInfo.setOrderId(UUID.randomUUID().toString());
        orderInfo.setName("商品 "  + new Random().nextInt(100));
        rabbitTemplate.convertAndSend("","order.create", orderInfo);
        return "ok2";
    }
}

Configuration

java 复制代码
@Configuration
public class RabbitMQConfig {

    @Bean("orderQueue")
    public Queue orderQueue() {
        return QueueBuilder.durable("order.create").build();
    }

    @Bean
    public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter);
        return rabbitTemplate;
    }
}

model

java 复制代码
@Data
public class OrderInfo implements Serializable {
    private String OrderId;
    private String name;
}

消费者(物流)代码

Listener

java 复制代码
@Component
@RabbitListener(queues = "order.create")
public class OrderListener {
    @RabbitHandler
    public void handMessage1(String orderInfo) {
        System.out.println("接收到订单消息String: " + orderInfo);
    }

    @RabbitHandler
    public void handMessage2(OrderInfo orderInfo) {
        System.out.println("接收到订单消息OrderInfo: " + orderInfo);
    }

}

Configuration

java 复制代码
@Configuration
public class RabbitMQConfig {
    @Bean
    public Jackson2JsonMessageConverter jackson2JsonMessageConverter() {
        return new Jackson2JsonMessageConverter();
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        rabbitTemplate.setMessageConverter(jackson2JsonMessageConverter);
        return rabbitTemplate;
    }
}
相关推荐
2501_941810834 分钟前
Rust高性能Web后端服务开发与Actix-Web实战分享:零成本抽象、高并发处理与内存安全实践
rabbitmq
2501_941144038 分钟前
人工智能赋能智慧安全互联网应用:智能监控与安全防护优化实践探索
rabbitmq
2501_941143324 小时前
微服务架构与服务网格在高并发互联网系统中的优化与工程实践经验分享
rabbitmq
2501_941871455 小时前
C++结合Redis与WebSocket构建高并发实时在线游戏服务设计与实战分享:成都多人竞技游戏架构优化经验
rabbitmq
2501_941870569 小时前
多语言微服务架构下的分布式事务管理与最终一致性实践
rabbitmq
2501_941878749 小时前
智能推荐系统与多语言微服务实现:Python、Java、C++与Go全栈开发实战
rabbitmq
2501_9418091411 小时前
Python在高并发互联网系统开发中的架构设计与性能优化全流程实践分享
rabbitmq
2501_9411458511 小时前
基于 Node.js 与 NestJS 构建高并发微服务与实时 API 系统实践分享
rabbitmq
2501_9411471112 小时前
Python大数据处理实战:异步IO与协程高效数据解析代码解析
rabbitmq
2501_9418798112 小时前
多语言微服务架构下的微服务灰度发布与蓝绿部署实践
rabbitmq