目录
spring整合rabbitmq——生产者
rabbitmq配置文件信息
倒入生产者工程的相关代码
简单工作模式
spring整合rabbitmq——消费者
spring整合rabbitmq——配置详解
SpringBoot整合RabbitMQ——生产者
SpringBoot整合RabbitMQ——消费者
使用原生amqp来写应该已经没有这样的公司了
创建两个工程,一个生产者一个消费者,分别倒入如下依赖
org.springframework
spring-context
5.1.7.RELEASE
org.springframework.amqp
spring-rabbit
2.1.8.RELEASE
junit
junit
4.12
org.springframework
spring-test
5.1.7.RELEASE
org.apache.maven.plugins
maven-compiler-plugin
3.8.0
1.8
rabbitmq.properties文件如下
rabbitmq.host=172.16.98.133
rabbitmq.port=5672
rabbitmq.username=heima
rabbitmq.password=heima
rabbitmq.virtual-host=/itcast
上面这个配置文件准备了三种工作模式需要的队列和交换机。
在测试类中加载配置文件并发送消息
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-producer.xml")
public class ProducerTest {
//1.注入RabbitTemplate
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testHelloWorld(){
//2.发送消息
rabbitTemplate.convertAndSend("spring_queue","hello-yhy");
}
/**
* 发送fanout
*/
@Test
public void testFaonut(){
//2.发送消息
rabbitTemplate.convertAndSend("spring_fanout_exchange","","spring fanout....");
}
/**
* 发送topic消息
*/
@Test
public void testTopic(){
//2.发送消息
rabbitTemplate.convertAndSend("spring_topic_exchange","heima.hehe.haha","spring topic....");
}
}
运行上三个测试方法过后管理端如下,出现了新的队列和交换机和信息
导入消费者的XML配置文件
消费者中还要创建对应的监听器的类,不然配置文件爆红
然后创建一个简单工作模式需要的对应类
public class SpringQueueListener implements MessageListener {
@Override
public void onMessage(Message message) {
/**
* 打印消息
*/
System.out.println(new String(message.getBody()));
}
}
在测试类中弄个方法用来加载配置文件,配置文件一加载,上面的监听器就会自动执行的。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:spring-rabbitmq-consumer.xml")
public class ConsumerTest {
@Test
public void test1(){
while(true){
}
}
}
其余的都是一模一样的写法。
队列声明的参数
广播类型的交换机和队列绑定时不需要指定路由key,direct和topic都要指定路由key.
引入如下依赖
org.springframework.boot
spring-boot-starter-amqp
org.springframework.boot
spring-boot-starter-test
再在resources目录下写一个配置文件类
# 配置RabbitMQ的基本信息 ip 端口 username password ...
spring:
rabbitmq:
host:
post: 5672
username: guest
password: guest
virtual-host: /
创建启动类
package com.yhy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class);
}
}
准备一个配置类
package com.yhy.rabbit.config;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfig {
public static final String EXCHANGE_NAME="boot_topic_exchange";
public static final String QUEUE_NAME="boot_queue";
//1.交换机
@Bean("bootExchange")
public Exchange bootExchange(){
return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build();
}
//2.Queue队列
@Bean("bootQueue")
public Queue bootQueue(){
return QueueBuilder.durable(QUEUE_NAME).build();
}
//3.队列和交换机绑定关系,Binding
/**
* 1.知道哪个队列
* 2.知道哪个交换机
* 3.routing key
*/
@Bean
public Binding bindQueueExchange(@Qualifier("bootQueue") Queue queue,@Qualifier("bootExchange") Exchange exchange){
return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs();
}
}
在测试类中准备如下测试方法
@SpringBootTest
@RunWith(SpringRunner.class)
public class ProducerTest {
//1.注入RabbitTemplate
@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSend(){
rabbitTemplate.convertAndSend(RabbitConfig.EXCHANGE_NAME,"boot.haha","boot mq hello");
}
}
运行后可以看见出现有新队列和消息
在性工程创建一个监听类如下,加上@Component注解之后就可以自动执行一次了
@Component
public class RabbitMQListener {
@RabbitListener(queues="boot_queue")
public void ListenerQueue(Message message){
System.out.println(message);
}
}
输出如下,成功获取到上面生产者发出的消息