SpringBoot整合RabbitMQ初学日记1--初级整合试用--单生单消

本文介绍了如何在Spring Boot应用中集成RabbitMQ,包括项目依赖配置、消息队列创建、发送和接收消息的实现,并展示了启动程序后的测试结果。此外,还展示了如何配置交换机和队列的绑定,以及使用RabbitTemplate发送确认回调消息。
1. 导入项目依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
2. 项目配置application.yml
spring:
  rabbitmq:
    host: 10.12.159.43
    port: 5672
    username: dannimeiyou
    password: shangyinlong1005
    virtual-host: /
    publisher-confirms: true
server:
  port: 8087
3. 注入消息队列配置

package com.rabbitmq.conf;

import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * create by Dannimeiyou for 2020/11/16  15:45
 * messageQueue配置文件
 */
@Configuration
public class RabbitMQServerConfig {

    @Bean
    public Queue getQueue(){
        return new Queue("test1");
    }
}

4. 创建发送对象

4.1接口

package com.rabbitmq.service;

/**
 * create by Dannimeiyou for 2020/11/16
 */
public interface RabbitMQServiceSend {
    public void send();
}

4.2实现

package com.rabbitmq.service.impl;

import com.rabbitmq.service.RabbitMQServiceSend;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * create by Dannimeiyou for 2020/11/16  15:50
 */
@Service("rabbitMQServiceSend")
public class RabbitMQServiceSendImpl implements RabbitMQServiceSend {
    @Autowired
    private AmqpTemplate amqpTemplate;
    @Override
    public void send() {
        String message=new SimpleDateFormat("yyyy-MM-dd").format(new Date())+"hello this is a message";
        /**
         * 发送message
         */
        amqpTemplate.convertAndSend("test1",message);
        System.out.println("message已被发送 = " + message);
    }
}

5. 创建接收监听

5.1创建接口

package com.rabbitmq.service;

/**
 * create by Dannimeiyou for 2020/11/16
 *  Message Receive Interface
 */
public interface RabbitMQServiceReceive {
    public void receive(String message);
}

5.2实现监听接口

package com.rabbitmq.service.impl;

import com.rabbitmq.service.RabbitMQServiceReceive;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * create by Dannimeiyou for 2020/11/16  16:00
 * test1消息接收
 */
@Component
@RabbitListener(queues = "test1")
public class RabbitMQServiceReceiveImpl implements RabbitMQServiceReceive {
    @Override
    @RabbitHandler
    public void receive(String message) {
        System.out.println("message已被接收完成,内容 = " + message);
    }
}

6.创建controller测试
package com.rabbitmq.controller;


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

/**
 * create by Dannimeiyou for 2020/11/16  16:03
 * RabbitMQ测试控制器
 */
@RestController
public class RabbitMQController {
    @Autowired
    private RabbitMQServiceSend rabbitMQServiceSend;


    @RequestMapping("/sendMs")
    public String test(){
        rabbitMQServiceSend.send();
        return "true";
    }
}

7.启动程序测试结果

在这里插入图片描述

"C:\Program Files (x86)\Java\jdk1.8.0_73\bin\java.exe" -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true "-javaagent:E:\IntelliJ IDEA 2019.1.4\lib\idea_rt.jar=50882:E:\IntelliJ IDEA 2019.1.4\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\charsets.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\deploy.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\access-bridge-32.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\cldrdata.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\dnsns.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\jaccess.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\jfxrt.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\localedata.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\nashorn.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\sunec.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\sunjce_provider.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\sunmscapi.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\sunpkcs11.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\ext\zipfs.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\javaws.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\jce.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\jfr.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\jfxswt.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\jsse.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\management-agent.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\plugin.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\resources.jar;C:\Program Files (x86)\Java\jdk1.8.0_73\jre\lib\rt.jar;F:\qf_Study\Ideastudy\rabbitmqFirstTest\target\classes;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter-web\2.3.4.RELEASE\spring-boot-starter-web-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter\2.3.4.RELEASE\spring-boot-starter-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot\2.3.4.RELEASE\spring-boot-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-autoconfigure\2.3.4.RELEASE\spring-boot-autoconfigure-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter-logging\2.3.4.RELEASE\spring-boot-starter-logging-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;E:\apache-maven-3.5.4\repository_yl\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;E:\apache-maven-3.5.4\repository_yl\org\apache\logging\log4j\log4j-to-slf4j\2.13.3\log4j-to-slf4j-2.13.3.jar;E:\apache-maven-3.5.4\repository_yl\org\apache\logging\log4j\log4j-api\2.13.3\log4j-api-2.13.3.jar;E:\apache-maven-3.5.4\repository_yl\org\slf4j\jul-to-slf4j\1.7.30\jul-to-slf4j-1.7.30.jar;E:\apache-maven-3.5.4\repository_yl\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;E:\apache-maven-3.5.4\repository_yl\org\yaml\snakeyaml\1.26\snakeyaml-1.26.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter-json\2.3.4.RELEASE\spring-boot-starter-json-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\core\jackson-databind\2.11.2\jackson-databind-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\core\jackson-annotations\2.11.2\jackson-annotations-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\core\jackson-core\2.11.2\jackson-core-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.11.2\jackson-datatype-jdk8-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.11.2\jackson-datatype-jsr310-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\com\fasterxml\jackson\module\jackson-module-parameter-names\2.11.2\jackson-module-parameter-names-2.11.2.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter-tomcat\2.3.4.RELEASE\spring-boot-starter-tomcat-2.3.4.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\apache\tomcat\embed\tomcat-embed-core\9.0.38\tomcat-embed-core-9.0.38.jar;E:\apache-maven-3.5.4\repository_yl\org\glassfish\jakarta.el\3.0.3\jakarta.el-3.0.3.jar;E:\apache-maven-3.5.4\repository_yl\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.38\tomcat-embed-websocket-9.0.38.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-web\5.2.9.RELEASE\spring-web-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-beans\5.2.9.RELEASE\spring-beans-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-webmvc\5.2.9.RELEASE\spring-webmvc-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-aop\5.2.9.RELEASE\spring-aop-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-context\5.2.9.RELEASE\spring-context-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-expression\5.2.9.RELEASE\spring-expression-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\projectlombok\lombok\1.18.12\lombok-1.18.12.jar;E:\apache-maven-3.5.4\repository_yl\com\rabbitmq\amqp-client\5.8.0\amqp-client-5.8.0.jar;E:\apache-maven-3.5.4\repository_yl\org\slf4j\slf4j-api\1.7.30\slf4j-api-1.7.30.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\boot\spring-boot-starter-amqp\2.1.3.RELEASE\spring-boot-starter-amqp-2.1.3.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-messaging\5.2.9.RELEASE\spring-messaging-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\amqp\spring-rabbit\2.2.11.RELEASE\spring-rabbit-2.2.11.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\amqp\spring-amqp\2.2.11.RELEASE\spring-amqp-2.2.11.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\retry\spring-retry\1.2.5.RELEASE\spring-retry-1.2.5.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-tx\5.2.9.RELEASE\spring-tx-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-core\5.2.9.RELEASE\spring-core-5.2.9.RELEASE.jar;E:\apache-maven-3.5.4\repository_yl\org\springframework\spring-jcl\5.2.9.RELEASE\spring-jcl-5.2.9.RELEASE.jar" com.rabbitmq.RabbitmqApplication

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.3.4.RELEASE)

2020-11-16 16:16:35.244  INFO 11296 --- [           main] com.rabbitmq.RabbitmqApplication         : Starting RabbitmqApplication on DESKTOP-865E5AM with PID 11296 (F:\qf_Study\Ideastudy\rabbitmqFirstTest\target\classes started by Dannimeiyou in F:\qf_Study\Ideastudy\rabbitmqFirstTest)
2020-11-16 16:16:35.254  INFO 11296 --- [           main] com.rabbitmq.RabbitmqApplication         : No active profile set, falling back to default profiles: default
2020-11-16 16:16:38.893  INFO 11296 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8087 (http)
2020-11-16 16:16:38.969  INFO 11296 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2020-11-16 16:16:38.971  INFO 11296 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.38]
2020-11-16 16:16:39.365  INFO 11296 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2020-11-16 16:16:39.365  INFO 11296 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 3805 ms
2020-11-16 16:16:41.461  INFO 11296 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
2020-11-16 16:16:42.122  INFO 11296 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8087 (http) with context path ''
2020-11-16 16:16:42.127  INFO 11296 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Attempting to connect to: [10.12.159.43:5672]
2020-11-16 16:16:42.269  INFO 11296 --- [           main] o.s.a.r.c.CachingConnectionFactory       : Created new connection: rabbitConnectionFactory#e85c6f:0/SimpleConnection@1774571 [delegate=amqp://dannimeiyou@10.12.159.43:5672/, localPort= 50904]
2020-11-16 16:16:42.514  INFO 11296 --- [           main] com.rabbitmq.RabbitmqApplication         : Started RabbitmqApplication in 10.902 seconds (JVM running for 15.073)
2020-11-16 16:17:29.367  INFO 11296 --- [nio-8087-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2020-11-16 16:17:29.369  INFO 11296 --- [nio-8087-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2020-11-16 16:17:29.420  INFO 11296 --- [nio-8087-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 51 ms
message已被发送 = 2020-11-16hello this is a message
message已被接收完成,内容 = 2020-11-16hello this is a message

今天的老色批就当到这里吧!明天依旧去浪啊宝贝…
package com.rabbit.produce.config;

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

/**
 * create by Dannimeiyou for 2020/11/17  14:06
 * 消息队列·交换机配置类
 */
@Configuration
public class RabbitQueueConfig{
    @Bean
    /**
     * queue1队列
     */
    public Queue queue1(){
        return new Queue("topic.queue1");
    }
    @Bean
    /**
     * quque2队列
     */
    public Queue queue2(){
        return new Queue("topic.a.queue2");
    }

    /**
     * 创建一个topicExchange类型的交换机
     */
    @Bean
    public TopicExchange topicExchange(){
        return new TopicExchange("topicExchange");
    }

    /**
     * 设置交换机与队列之间的绑定
     */
    @Bean
    public Binding bingingTopicExchange1(Queue queue2,TopicExchange topicExchange){
        Binding with = BindingBuilder.bind(queue2).to(topicExchange).with("topic.#");
        return with;
    }

    /**
     * 再绑定一个 两个的不同师路由不同,.with(String routingKey);
     * @param queue1
     * @param topicExchange
     * @return
     */
    @Bean
    public Binding bindingTopicExchange2(Queue queue1,TopicExchange topicExchange){
        Binding with = BindingBuilder.bind(queue1).to(topicExchange).with("topic.*");
        return with;
    }



}

package com.rabbit.produce.service.impl;

import com.rabbit.produce.bean.UserTest;
import com.rabbit.produce.service.RabbitService;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;

/**
 * create by Dannimeiyou for 2020/11/17  14:27
 */
@Service("rabbitService")
public class RabbitServiceImpl implements RabbitService,RabbitTemplate.ConfirmCallback {
    @Autowired
    private RabbitTemplate template;
    @Override
    public Boolean sender(UserTest user) {
        if(user!=null){
           //template.convertAndSend("topicExchange","topic.queue1",user);
            user.setUserName("tomcat2");
            template.convertAndSend("topicExchange","topic.hahaha.tomcat",user);
            template.convertAndSend("","",user,new CorrelationData("create id"));
            return true;
        }return false;
    }

    @PostConstruct
    //类对象加载完成后会执行的方法
    public void init(){
        template.setMandatory(true);
        template.setConfirmCallback(this);
    }

    /**
     *
     * @param correlationData 返回消息的id  //create id
     * @param b 是否成功
     * @param casue 发送失败的原因
     */
    @Override
    public void confirm(CorrelationData correlationData, boolean b, String casue) {
        System.out.println("返回id"+correlationData.getId());
        System.out.println("result = " + b);
        System.out.println("错误原因 = " + casue);
    }

}

接收方:

package com.rabbitmq.service.impl;

import com.rabbit.produce.bean.UserTest;
import com.rabbitmq.service.RabbitService;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * create by Dannimeiyou for 2020/11/17  14:47
 */
@Component
@RabbitListener(queues = "topic.queue1")
public class RabbitServiceImpl implements RabbitService {
    @Override
    @RabbitHandler
    public void custom(UserTest object) {
        System.out.println("object+topic.quque1 = " +object);
    }
}

package com.rabbitmq.service.impl;

import com.rabbit.produce.bean.UserTest;
import com.rabbitmq.service.RabbitService;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

/**
 * create by Dannimeiyou for 2020/11/17  15:35
 */
@Component
@RabbitListener(queues = "topic.a.queue2")
public class RabbitServiceImpl2 implements RabbitService {
    @Override
    @RabbitHandler
    public void custom(UserTest o) {
        System.out.println("o.queue2 = " + o);
    }
}

本资源为一套采用C#语言编写的产品质量在线监测系统完整程序代码,适用于毕业设计用途。该系统严格遵循统计过程控制(SPC)原理构建,经综合评审获得优异评分,程序经过完整测试可稳定运行。该系统面向计算机科学与技术、自动化及相关专业的学习者与从业人员,适用于课程实践、综合实训及毕业设计等多种教学场景。系统设计思路清晰,具备良好的学习参考价值,技术基础扎实的用户可基于现有架构进行功能扩展与定制化改造。系统运行环境要求:开发工具:Visual Studio 2013数据库:SQL Server 2012初始登录凭证:用户名称:admin访问密码:admin核心功能模块包括:1. 用户身份验证与登录提示机制2. SPC在线监测主控界面3. 基础数据管理元(涵盖员工档案、产品资料、车间配置、工艺流程及设备台账)4. 分类检索功能5. 控制图异常判定规则配置6. 测量数据标注与列表展示7. 异常状态监控(包括未处理、已受理、已解决状态指示)统计过程控制图表体系:- Xbar-R控制图组(涵盖极差R与均值Xbar控制图)- Xmedian-R控制图组(中位数控制图)- X-Rs控制图组(移动极差控制图)- 值X控制图- 质量特征分布直方图- 过程能力指数Cpk分析图该系统实现了从数据采集到质量分析的完整闭环,为制造业质量管理提供了专业的技术解决方案。资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值