- pom导入jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
- application.properites做配置
#rabbitmq地址:此处为linux系统
spring.rabbitmq.host=192.168.77.101
#端口号:默认是5672
spring.rabbitmq.port=5672
#rabbitmq账号密码
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
- 创建队列
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
//初始化时创建队列
@Configuration
public class TestQueue {
@Bean
public Queue creatQuene(){
return new Queue("testQueue");
}
}
- 创建消息的发送者
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* 创建消息的发送者
*/
@Component
public class Sender {
/**
* 通过AmqpTemplate发送消息给队列
*/
@Autowired
private AmqpTemplate rabbitmqTemplate;
/**
* 创建发送消息的方法
*/
public void sendMessage(String msg){
this.rabbitmqTemplate.convertAndSend("testQueue",msg);
}
}
- 创建消息的接受者
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* 创建消息的接收者
*/
@Component
public class Recever {
/**
* 通过消息队列的监听机制接收消息
*/
@RabbitListener(queues = "testQueue")
public void receiveMessage(String msg){
System.out.println("收到的消息是:"+ msg);
}
}
- 测试方法
import com.example.Springbootdemo.rabbitmq.Sender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootdemoApplicationTests {
@Autowired
private Sender sender;
//测试消息队列
@Test
public void contextLoads() {
this.sender.sendMessage("hollo rabbitmq");
}
}
- 结果
- Rabbitmq原理
- Message 消息。消息是不具名的,它由消息头消息体组成。消息体是不透明的,而消息头则由 一系列可选属性组成,这些属性包括:routing-key(路由键)、priority(相对于其他消息的优先 权)、delivery-mode(指出消息可能持久性存储)等
-
.Publisher 。 消息的生产者。也是一个向 交换器 发布消息的 客户端应用程序 。
-
.Consumer 。 消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。
-
.Exchange 交换器。用来接收生产者发送的消息并将这些消息 路由给服务器中的队列。 三种常用的交换器类型 :
- direct(发布与订阅 完全匹配)
- fanout(广播)
- topic(主题,规则匹配)
5.Binding 绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息 队列连接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。
6.Queue 消息队列。用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一 个消息可投入一个或多个队列。消息一直在队列里面,等待消费者链接到这个队列将其取走
7.Routing-key 。路由键。RabbitMQ 决定消息该投递到哪个队列的规则。 队列通过路由键绑定到交换器。 消息发送到 MQ 服务器时,消息将拥有一个路由键,即便是空的,RabbitMQ 也会将其 和绑定使用的路由键进行匹配。 如果相匹配,消息将会投递到该队列。 如果不匹配,消息将会进入黑洞。
.8.Connection 。链接。指 rabbit 服务器和服务建立的 TCP 链接。
.9.Channel 信道。 1,Channel 中文叫做信道,是 TCP 里面的虚拟链接。例如:电缆相当于 TCP,信道是 一个独立光纤束,一条 TCP 连接上创建多条信道是没有问题的。 2,TCP 一旦打开,就会创建 AMQP 信道。 3,无论是发布消息、接收消息、订阅队列,这些动作都是通过信道完成的。
10.Virtual Host 。虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证 和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有 自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时指定, RabbitMQ 默认的 vhost 是/
11.Borker 。表示消息队列服务器实体。