springboot使用rabbitmq实践

公司要把项目放到阿里云上,然后使用阿里云的数据库和消息队列。结果阿里云上面只有rabbitmq服务器而没有rocketmq服务器。所以我只好再写一套rabbitmq的代码。顺便一提阿里云上没有tidb只有mysql,幸好tidb是兼容mysql的。

参考文章:

springboot+rabbitmq整合示例程

Windows下安装及配置RabbitMQ

rabbitmq的安装就不说了,因为是用erlang语言写的,安装rabbitmq之前还需要安装erlang。

rabbitmq的使用真的挺方便的,不同于kafka需要zookeeper,rocketmq需要nameserver,只要启动一个服务就行了,而且自带网页管理监控系统,这点真的让我喜欢。

springboot很好地整合了rabbitmq,不用rocketmq那样麻烦,用默认的配置和注解的方式就能使用。

先maven导包

        <dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-amqp</artifactId>
	    </dependency>

rabbitmq配置

#rabbitmq配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.virtual-host=/
#rabbitmq消息重试设置
spring.rabbitmq.listener.simple.retry.enabled=true
spring.rabbitmq.listener.simple.retry.max-attempts=5
spring.rabbitmq.listener.simple.retry.initial-interval=2000
spring.rabbitmq.listener.simple.default-requeue-rejected=false

然后配置最简单的队列

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitmqConfig {
	@Bean
	public Queue baseQueue() {
        //队列名以这里的名字为准
		return new Queue("base");
	};
	
}

我尝试了一下是队列是以new Queue("队列名");为准的,不知道为什么看的文章中是以方法名作为队列名,然后实际上会报错。

按理来说是要配置相应的转发器,并且将转发器和队列联系起来,但是rabbitmq中是有默认的转发器的,所以用这种最简单的方式也可以

下面配置消费者

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

import com.kq.highnet2.framework.base.common.model.RabbitMqMessageDTO;

@Component
@RabbitListener(queues = "base")//也可以加在方法上
public class RabbitMqReceiver {
	Logger logger = LoggerFactory.getLogger("mqInfo");
	
	@RabbitHandler
    public void process(RabbitMqMessageDTO message) throws Exception {
        logger.info("==========RABBITMQ_CONSUME_START===========");  
        logger.info("key:"+message.getKey());   
        logger.info("body:"+message.getBody());
        logger.info("==========RABBITMQ_CONSUME_END===========");  
    }
}

和rocketmq比起来用注解的方式配置简单多了,而且没有rocketmq中的顺序消费,并发消费模式之分,并且也不用返回值,如果要重复消费抛出异常就行,注意,抛出AmqpRejectAndDontRequeueException异常的话是不会重复消费的。

 

然后发送消息


    @Resource
    AmqpTemplate amqpTemplate;

    public void sendMessage(String key, String msg){
			RabbitMqMessageDTO message = new RabbitMqMessageDTO();
			message.setKey(key);
			message.setBody(msg);
			amqpTemplate.convertAndSend("monitorDataQueue", message);
    }

和rocketmq比起来,也不需要配置生产者集群什么的,使用很简单,当然效率的比较久不清楚了

这就是rabbitmq的简单使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值