程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

Rabbit MQ direct模式 程序Demo

发布于2021-05-29 20:54     阅读(412)     评论(0)     点赞(1)     收藏(4)


Rabbit MQ direct模式 程序Demo

从网上学习Rabbit Mq中间件
写出如下建立Demo过程

第一步

用Docker 命令下载Rabbit Mq

docker run -di --name myrabitt -e RABBITMQ_DEFAULT_USER=admin  -e RABBITMQ_DEFAULT_PASS=admin  -p 5672:5672  -p 15672:15672 -p 25672:25672 -p 61613:61613 -p 1883:1883 rabbitmq:management

测试Rabbit Mq是否安装成功,访问

localhost:15672

账号密码都是admin
能够登录成功,证明安装完成

第二步

新建Producer SpringBoot程序
新建service文件夹,放入以下orderService类

package com.robert.rabbitmq.producer.service;

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.UUID;

@Service
public class orderService {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void makeOrder(String userID, String produceId, int num) {

        String orderId = UUID.randomUUID().toString();
        System.out.print("订单生成成功" + orderId);
        String exchangeName = "direct_order_exchange";
        String sMSRoutingKey = "sms";
        String emailRoutingKey = "email";
        rabbitTemplate.convertAndSend(exchangeName, sMSRoutingKey, orderId);
        rabbitTemplate.convertAndSend(exchangeName, emailRoutingKey, orderId);

    }
}

新建config文件夹,放入DirectRabbitConfiguration类

package com.robert.rabbitmq.producer.config;

import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DirectRabbitConfiguration {

    @Bean
    public DirectExchange directExchange() {
        return new DirectExchange("direct_order_exchange", true, false);
    }

    @Bean
    public Queue smsQueue() {
        return new Queue("sms.direct.queue", true);
    }
    @Bean
    public Queue messageQueue() {
        return new Queue("message.direct.queue", true);
    }
    @Bean
    public Queue emailQueue() {
        return new Queue("email.direct.queue", true);
    }

    @Bean
    public Binding smsBinding() {
        return BindingBuilder.bind(smsQueue()).to(directExchange()).with("sms");
    }

    @Bean
    public Binding messageBinding() {
        return BindingBuilder.bind(messageQueue()).to(directExchange()).with("message");
    }

    @Bean
    public Binding emailBinding() {
        return BindingBuilder.bind(emailQueue()).to(directExchange()).with("email");
    }
}

修改自动生成的测试类,改成如下

@SpringBootTest
class SpringbootOrderRabbitmqProducerApplicationTests {

    @Autowired
    private orderService orderservice;

    @Test
    void contextLoads2() {
        orderservice.makeOrder("1","1",12);
    }

}

第三步

新建Consumer SpringBoot程序
新建sevice文件夹,放入以下三个类

package com.robert.rabbitmq.consumer.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@RabbitListener(queues = "email.direct.queue")
@Component
public class DirectEmailConsumer {
    @RabbitHandler
    public void ReceiveMessage(String message){
        System.out.println("email.direct接受到的信息为"+message);
    }
}

package com.robert.rabbitmq.consumer.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@RabbitListener(queues = "message.direct.queue")
@Component
public class DirectMessageConsumer {
    @RabbitHandler
    public void ReceiveMessage(String message){
        System.out.println("message.direct接受到的信息为"+message);
    }
}

package com.robert.rabbitmq.consumer.service;

import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@RabbitListener(queues = "sms.direct.queue")
@Component
public class DirectSMSConsumer {
    @RabbitHandler
    public void ReceiveMessage(String message){
        System.out.println("sms.direct接受到的信息为"+message);
    }
}

第四步

运行程序
先运行生产者Producer SpringBoot Application启动程序
再运行consumer
By the way:由于在生产者中的配置类绑定了交换机exchange、队列queue、路由routingKey,所以先运行;也可以将配置类写在消费者中

运行效果如下
启动Docker
在这里插入图片描述
未启动生产者时的Rabbit Mq中exchange
在这里插入图片描述
启动生产者
在这里插入图片描述
运行完成
在这里插入图片描述
生产者之后的Rabbit Mq中exchange
在这里插入图片描述
生产者之后的Rabbit Mq中queue的绑定关系及routingKey
在这里插入图片描述
消息队列
在这里插入图片描述
启动消费者
在这里插入图片描述
消费者消费完成输出日志
在这里插入图片描述
在这里插入图片描述

第五步

目录结构如下
在这里插入图片描述
在这里插入图片描述

参考视频

[学相伴]RabbitMQ最新完整教程IDEA版通俗易懂 | KuangStudy | 狂神说
https://www.bilibili.com/video/BV1dX4y1V73G

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.robert.rabbitmq</groupId>
    <artifactId>springboot-order-rabbitmq-producer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-order-rabbitmq-producer</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <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>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>


所属网站分类: 技术文章 > 博客

作者:你看我可爱不

链接:http://www.javaheidong.com/blog/article/207274/a6291b9ba0e47a9bbab5/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)