配置
添加pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
yml配置
注意:端口15672是客户端访问端口,服务端的访问端口为5672
spring:
rabbitmq:
virtual-host: /
host: ip
username: 用户名
password: 密码
port: 5672
创建virtual-host命令:
rabbitmqctl add_vhost 虚拟服务器名称
例如:rabbitmqctl add_vhost my_test
如果不想创建可以在管理页面查看对应用户名的virtual host
配置类
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitmqConfig {
/**交换机名称*/
public static final String EXCHANGE_FANOUT_NAME="fanout";
public static final String EXCHANGE_DIRECT_NAME="direct";
public static final String EXCHANGE_TOPIC_NAME="topic";
/**队列名称*/
public static final String QUEUE_NAME="queue";
/**
* 设置交换机
* FanoutExchange对应类型fanout
* DirectExchange对应类型direct
* TopicExchange对应类型topic
* @return
*/
@Bean
public FanoutExchange fanoutExchange(){
// durable(true) 交换机持久化
// autoDelete(false) 不自动删除
return new FanoutExchange(EXCHANGE_FANOUT_NAME,true,false);
}
/**
* 设置队列
* @return
*/
@Bean
public Queue queue(){
// durable(true) 自由队列
return new Queue(QUEUE_NAME,true);
}
/**
* 交换机和队列绑定
* @return
*/
@Bean
public Binding binding() {
return BindingBuilder.bind(queue()).to(fanoutExchange());
}
}
生产者
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
@Component
public class Producer {
@Resource
RabbitTemplate rabbitTemplate;
public void test() {
// 源码中的routingKey参数:路由key/队列名称
rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_FANOUT_NAME,RabbitmqConfig.QUEUE_NAME,"hello word");
}
}
消费者
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
/**
* Created by zy on 2023-03-23
*/
@Component
@Slf4j
public class Consumer {
@RabbitListener(queues = "queue") // 监听的队列名称
@RabbitHandler
public void test(String msg) {
log.info("消费者消费消息:"+msg);
}
}