38.springboot使用rabbitmq
pom依赖
<!--amqp依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
配置文件添加
spring:application:name: message-servicerabbitmq:host: localhostport: 5672virtual-host: / # 虚拟主机,对每个用户进行隔离username: guestpassword: guest# 日志配置
logging:pattern:dateformat: yyyy-MM-dd HH:mm:ss:SSSlevel:com.xkj.org: info# rabbitmq消息日志org.springframework.amqp: DEBUG
配置队列对象
package com.xkj.org.config;import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 通过配置类声明队列*/
@Configuration
public class RabbitMQConfig {final static String QUEUE_NAME = "user.queue";@Beanpublic Queue userQueue() {return new Queue(QUEUE_NAME, true);}
}
发送消息
package com.xkj.org.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xkj.org.entity.User;
import com.xkj.org.mapper.UserMapper;
import com.xkj.org.service.IUserService;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {final static String QUEUE_NAME = "user.queue";@Autowiredprivate RabbitTemplate rabbitTemplate;@Overridepublic User getById(Integer userId) {return baseMapper.selectById(userId);}@Overridepublic void register(User user) {baseMapper.insert(user);//发生消息到rabbitmq,异步操作String message = String.format("你好%s,恭喜你注册成功", user.getUsername());rabbitTemplate.convertAndSend(QUEUE_NAME, message);}}
消费者
package com.xkj.org.listener;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
@Slf4j
public class UserMsgListener {final static String QUEUE_NAME = "user.queue";@RabbitListener(queues = QUEUE_NAME)public void listenSimpleQueueMessage(String msg) {log.info("接收到消息为:【{}】", msg);}
}