在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):scalad/SpringBoot-RabbitMQ开源软件地址(OpenSource Url):https://github.com/scalad/SpringBoot-RabbitMQ开源编程语言(OpenSource Language):Java 100.0%开源软件介绍(OpenSource Introduction):SpringBoot-RabbitMQ 消息队列这个指南将引导你建立一个RabbitMQ AMQP服务器发布和订阅消息的过程。 声明可以使用本人阿里云安装好的RabbitMQ服务器
构建你会使用 Spring AMQP的 RabbitTemplate构建应用系统来发布消息并且使用一个MessageListenerAdapter POJO来订阅消息
需要
如何完成像许多的Spring Getting Started guides项目,你可以从头开始并完成每一步,或者你可以绕过你已经熟悉的一些步骤,无论是哪种步骤,你最终可以完成代码 从头开始的话,请去看使用Gradle构建 如果要绕过你熟悉的,按照以下构建:
当你完成时,你可以对比在 使用Gradle构建第一步你需要建立一个基本的脚本,当你构建APP应用时你可以任何你喜欢的构建系统,但这些代码你必须要使用到Gradle和Maven,如果你对这两个不熟悉,你可以参考Building Java Projects with Gradle和Building Java Projects with Maven 1.创建目录结构在你项目的文件夹中创建如下的子目录结构,例如,在*nix系统中使用命令创建
2.创建Gradle配置文件build.gradle以下来自初始化Gradle配置文件
Spring Boot gradle plugin提供了很多方便的特性:
使用Maven构建第一步你需要建立一个基本的脚本,当你构建APP应用时你可以任何你喜欢的构建系统,但这些代码你必须要使用到Maven,如果你对Maven不熟悉,你可以参考Building Java Projects with Maven 1.创建目录结 构在你项目的文件夹中创建如下的子目录结构,例如,在*nix系统中使用命令创建
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-messaging-rabbitmq</artifactId>
<version>0.1.0</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project> Spring Boot gradle plugin提供了很多方便的特性:
使用IDE编译1.建立RabbitMQ沙箱在你可以构建你的消息应用前,你需要建发布和订阅消息的服务器 RabbitMQ是一个AMQP(Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计)服务器,这个服务器是免费的,你可以在http://www.rabbitmq.com/download.html,你可以手动的下载,或者如果你使用的Mac可以自己制作
打开服务器位置并使用默认的配置进行启动
你可以看到如下的一些输出信息:
如果你有运行在本地的docker 你也可以使用Docker Compose(一个部署多个容器的简单但是非常必要的工具)来快速的启动RabbitMQ服务器,在这个项目的根目录中有一个
如果这个文件在你的当前目录中你可以运行 2.创建RabbitMQ消息订阅任何基于消息的应用程序你都需要创建一个消息订阅来响应消息的发布
package hello;
import java.util.concurrent.CountDownLatch;
import org.springframework.stereotype.Component;
@Component
public class Receiver {
private CountDownLatch latch = new CountDownLatch(1);
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
latch.countDown();
}
public CountDownLatch getLatch() {
return latch;
}
} 定义一个简单的
3.注册监听并发布消息Spring AMQP的
你将会使用
package hello;
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.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
public class Application {
final static String queueName = "spring-boot";
final static String HOST = "120.27.114.229";
final static String USERNAME = "root";
final static String PASSWORD = "root";
final static int PORT = 15672;
@Bean
Queue queue() {
return new Queue(queueName, false);
}
@Bean
TopicExchange exchange() {
return new TopicExchange("spring-boot-exchange");
}
@Bean
Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(queueName);
}
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(HOST);
connectionFactory.setPort(PORT);
connectionFactory.setUsername(USERNAME);
connectionFactory.setPassword(PASSWORD);
connectionFactory.setVirtualHost("/");
//必须要设置,消息的回掉
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
public static void main(String[] args) throws InterruptedException {
SpringApplication.run(Application.class, args);
}
}
定义在
消息监听容器和接收都是你为了监听到消息所必需的,为了发布一个消息,你也需要一个Rabbit模板
4.发送文本消息测试消息是通过
package hello;
import java.util.concurrent.TimeUnit;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class Runner implements CommandLineRunner {
private final RabbitTemplate rabbitTemplate;
private final Receiver receiver;
private final ConfigurableApplicationContext context;
public Runner(Receiver receiver, RabbitTemplate rabbitTemplate,
ConfigurableApplicationContext context) {
this.receiver = receiver;
this.rabbitTemplate = rabbitTemplate;
this.context = context;
}
@Override
public void run(String... args) throws Exception {
System.out.println("Sending message...");
rabbitTemplate.convertAndSend(Application.queueName, "Hello from RabbitMQ!");
receiver.getLatch().await(10000, TimeUnit.MILLISECONDS);
context.close();
}
} runner可以在测试中进行模拟,以此,reveive可以单独的进行测试 5.启动应用
6.编译可执行的JAR包你可以使用Gradle或者Maven从命令行运行程序,或者你可以编译成一个包含了所有的依赖,类和资源的可执行的JAR文件,然后就可以直接运行。这使它在不同的环境和在整个应用程序的开发声明周期的部署中变得非常容易 如果你使用的时Gradle,你需要使用
如果你使用的时Maven,你需要使用
然后你就可以看到如下的输出:
可以在控制台输出: |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论