springboot整合rabbitmq
添加依赖
pom.xml 如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
配置rabbitmq
- application.xml如下:
spring: rabbitmq: host: localhost port: 5672 publisher-confirms: true virtual-host: / username: admin password: admin配置参数如下: |参数|可选值|描述| –|–|– |host|peer1(可自定义)|域名 |port|默认5672|端口 |publisher-confirms|true/false|是否开启消息确认 |virtual-host|/|虚拟域名 |username|guest(默认)|用户名 |password|guest(默认)|密码
- 配置类
@Configuration public class RabbitmqConfiguration { @Bean public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) { RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory); rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter()); return rabbitTemplate; } @Bean public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory(ConnectionFactory connectionFactory) { SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory = new SimpleRabbitListenerContainerFactory(); simpleRabbitListenerContainerFactory.setConnectionFactory(connectionFactory); simpleRabbitListenerContainerFactory.setMessageConverter(new Jackson2JsonMessageConverter()); return simpleRabbitListenerContainerFactory; }RabbitTemplate: 发送消息
默认MessageConvertor是SimpleMessageConverter,可以处理字符串或者字节数组,而我们一般需要处理json,所以设置为Jackson2JsonMessageConverter。
SimpleRabbitListenerContainerFactory: 接收消息 默认MessageConvertor是SimpleMessageConverter,可以处理字符串或者字节数组,而我们一般需要处理json,所以设置为Jackson2JsonMessageConverter。
实现生产者
示例代码如下:
@Component
public class RabbitmqSender {
@Autowired
private RabbitTemplate rabbitTemplate;
public void send(String queueName, Object message) {
this.rabbitTemplate.convertAndSend(queueName, message);
}
}
实现消费者
示例代码如下:
- 抽象消费者
public interface AbstractConsumer<Q> { Q init(); } - 具体消费者
@RabbitListener( queues = "user-service", containerFactory = "simpleRabbitListenerContainerFactory" ) public class UserServiceConsumer implements AbstractConsumer<UserQueue> { @RabbitHandler public void process(@Payload User user) { System.out.println(JSON.toJSONString(user)); } @Bean @Override public UserQueue init() { return new UserQueue("user-service"); } }
问题
- reply-code=530, reply-text=NOT_ALLOWED - access to vhost ‘/’ refused for user user_admin
解决方法: 定位发现是连接rabbitmq使用的用户没有赋予访问权限,我创建的是admin用户,给admin用户赋予‘/’目录的访问权限就可以,执行如下命令:
sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
扫码关注有惊喜
(转载本站文章请注明作者和出处 倔强的小黄牛-angrycow1111)
Show Disqus Comments