1 安装rabbitmq-server
apt install rabbitmq-server -y
2 开启web管理
rabbitmq-plugins enable rabbitmq_management
3 登录web端
访问地址 http://localhost:15672 用户名: guest 密码:guest
4 更改用户名密码
sudo rabbitmqctl list_users
sudo rabbitmqctl add_user admin admin
sudo rabbitmqctl set_user_tags admin administrator
5 SpringBoot 配置
5.1 添加maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>
5.2 添加转换类
@Component
class RabbitMqConfig {
@Bean
fun jsonMessageConverter(): MessageConverter {
return Jackson2JsonMessageConverter()
}
}
5.3 创建接口
举例:WimMessageQueueService接口interface
interface WimMessageQueueService {
fun sendDataPacket(wimDataPacket: WimDataPacket)
}
WimMessageQueueServiceImpl服务类
@Service
class WimMessageQueueServiceImpl: WimMessageQueueService {
@Autowired
lateinit var rabbitTemplate: RabbitTemplate
override fun sendDataPacket(wimDataPacket: WimDataPacket) {
rabbitTemplate.convertAndSend("data.packet.exchange","all", wimDataPacket)
}
@RabbitListener(queues = ["data.packet.queue"])
fun receiveDataPacket(wimDataPacket: WimDataPacket) {
wimDataPacket.toJSONString().println("receive1")
}
@RabbitListener(queues = ["data.packet.queue"])
fun receiveDataPacket2(wimDataPacket: WimDataPacket) {
wimDataPacket.toJSONString().println("receive2")
}
@RabbitListener(bindings = [QueueBinding(value = Queue(name = "data.packet.mysql.queue", durable = "true"),
exchange = Exchange(name = "data.packet.exchange", type = ExchangeTypes.DIRECT), key = ["all", "mysql"]),
])
fun receiveDataPacketMysql(wimDataPacket: WimDataPacket) {
wimDataPacket.toJSONString().println("all, mysql")
}
@RabbitListener(bindings = [QueueBinding(value = Queue(name = "data.packet.redis.queue", durable = "true"),
exchange = Exchange(name = "data.packet.exchange", type = ExchangeTypes.DIRECT), key = ["all", "redis"]),
])
fun receiveDataPacketRedis(wimDataPacket: WimDataPacket) {
wimDataPacket.toJSONString().println("all, redis")
}
}