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);
}
}
本文介绍了如何在Spring Boot应用中集成RabbitMQ,包括项目依赖配置、消息队列创建、发送和接收消息的实现,并展示了启动程序后的测试结果。此外,还展示了如何配置交换机和队列的绑定,以及使用RabbitTemplate发送确认回调消息。

1018

被折叠的 条评论
为什么被折叠?



