SpringBoot整合RabbitMQ()

  本篇文章为你整理了SpringBoot整合RabbitMQ()的详细内容,包含有 SpringBoot整合RabbitMQ,希望能帮助你了解 SpringBoot整合RabbitMQ。

  启动RabbitMQ

  RabbitMQ可以算是一个异步消息队列,在实际的开发项目中,一般是以工具模块的方式创建,像一些SpringBoot工程所需要的基本依赖都是会有的

  说明:关键在于谁是消息的生产者、消息的消费者;另外还需要注意生产消费之间消息类型的传递

  创建一个maven工程,导入RabbitMQ相关的依赖

  

 dependencies 

 

   dependency

   groupId org.springframework.boot /groupId

   artifactId spring-boot-starter-actuator /artifactId

   /dependency

   dependency

   groupId org.springframework.cloud /groupId

   artifactId spring-cloud-starter-bus-amqp /artifactId

   /dependency

   dependency

   groupId com.alibaba /groupId

   artifactId fastjson /artifactId

   /dependency

   /dependencies

  

 

  编写一个简单的配置类,配置消息转换器

  

import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;

 

  import org.springframework.amqp.support.converter.MessageConverter;

  import org.springframework.context.annotation.Bean;

  import org.springframework.context.annotation.Configuration;

  @Configuration

  public class RabbitConfig {

   * 配置消息转换器,默认是字符串转换器

   * @return MessageConverter

   @Bean

   public MessageConverter messageConverter() {

   return new Jackson2JsonMessageConverter();

  

 

  编写一个常量类

  

public class RabbitConstant {

 

   /** 短信发送 */

   public static final String EXCHANGE_DIRECT_MSM = "exchange.direct.msm";

   public static final String ROUTING_MSM = "msm";

   public static final String QUEUE_MSM = "queue.msm";

  

 

  在编写一个简单的生产消息的封装类

  

import org.springframework.amqp.rabbit.core.RabbitTemplate;

 

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.stereotype.Service;

  @Service

  public class RabbitService {

   @Autowired

   private RabbitTemplate rabbitTemplate;

   * 生产消息到RabbitMQ中

   * @param exchange 交换机

   * @param routingKey 路由Key

   * @param message 任意类型的消息

   * @return boolean

   public boolean sendMessage(String exchange, String routingKey, Object message) {

   rabbitTemplate.convertAndSend(exchange, routingKey, message);

   return true;

  

 

  虽说一个简单的整合就这么几步,主要还是实操示例,这里以下单成功,通过手机发送消息通知为示例

  还需要在创建一个工程(接触过微服务项目,很容易了解不同模块有需要放在不同的服务下,便于管理)

  既然涉及手机短信发消息,可参考SpringBoot整合阿里云短信服务

  在手机短信服务中导入消息队列模块,所以在原有的基础上添加配置文件

  

#rabbitmq地址

 

  spring.rabbitmq.host=your_ip

  spring.rabbitmq.port=5672

  spring.rabbitmq.username=your_username

  spring.rabbitmq.password=your_password

  

 

  封装手机发送消息,和手机发送验证码业务代码相似。注意param变量

  

@Service

 

  public class MsmServiceImpl implements MsmService {

   @Override

   public boolean orderConfirm(Map String, Object param) {

   if (StringUtils.isEmpty(param.get("phone"))) return false;

   // 整合阿里云短信服务,设置相关参数

   DefaultProfile profile = DefaultProfile.

   getProfile(ConstantPropertiesUtils.REGION_ID,

   ConstantPropertiesUtils.ACCESS_KEY,

   ConstantPropertiesUtils.ACCESS_SECRET);

   IAcsClient client = new DefaultAcsClient(profile);

   SendSmsRequest request = new SendSmsRequest();

   request.setPhoneNumbers(param.get("phone"));//接收短信的手机号码

   request.setSignName(ConstantPropertiesUtils.SIGN_NAME);//短信签名名称

   request.setTemplateCode(ConstantPropertiesUtils.TEMPLATE_CODE);//短信模板CODE

   // 这里的param变量中的键值需要和短信模板中设定的键值一致,否则发送不成功

   request.setTemplateParam(JSONObject.toJSONString(param));//短信模板变量对应的实际值

   try {

   SendSmsResponse response = client.getAcsResponse(request);

   // 发送短信,尽量打印出来是否发送成功

   new Gson().toJson(response);

   } catch (ClientException e) {

   e.printStackTrace();

   return false;

   return true;

  

 

  在当前短信服务模块中创建一个RabbitMQ消息监听(可以理解为消息的消费者)

  

import com.rabbitmq.client.Channel;

 

  import com.xsha.msg.service.MsgService;

  import com.xsha.rabbit.constant.RabbitConstant;

  import org.springframework.amqp.core.Message;

  import org.springframework.amqp.rabbit.annotation.Exchange;

  import org.springframework.amqp.rabbit.annotation.Queue;

  import org.springframework.amqp.rabbit.annotation.QueueBinding;

  import org.springframework.amqp.rabbit.annotation.RabbitListener;

  import org.springframework.beans.factory.annotation.Autowired;

  import org.springframework.stereotype.Component;

  @Component

  public class MsgReceive {

   @Autowired

   private MsgService msgService;

   /** 消息监听:监听到RabbitMQ中有消息就消费,并通过手机发送短信通知 */

   @RabbitListener(bindings = @QueueBinding(

   value = @Queue(value = RabbitConstant.QUEUE_MSM, durable = "true"),

   exchange = @Exchange(value = RabbitConstant.EXCHANGE_DIRECT_MSM),

   key = {RabbitConstant.ROUTING_MSM}

   public void orderConfirm(Map String, Object param, Message message, Channel channel) {

   msgService.orderConfirm(param);

  

 

  由于涉及订单,所以订单是一个独立的服务模块,即导入消息队列模块,在原有的基础上添加配置文件

  

#rabbitmq地址

 

  spring.rabbitmq.host=your_ip

  spring.rabbitmq.port=5672

  spring.rabbitmq.username=your_username

  spring.rabbitmq.password=your_password

  

 

  在实际开发中,用户下单并不会立即通知用户下单成功,而是通过异步的方式稍后告知用户下单成功。简单示例,不可钻牛角尖

  生成订单业务(不考虑库存),就是消息的生产者

  

@Service

 

  public class OrderServiceImpl implements OrderService {

   @Autowired

   private RabbitService rabbitService;

   @Override

   public void saveOrder(String userId, String id) {

   UserInfo userInfo = userInfoService.selectById(userId);

   String phone = userInfo.getPhone();

   // 短信信息封装(根据业务需求,封装重要信息)

   Map String,Object param = new HashMap String,Object (){{

   put("title", "消息标题");

   put("phone", phone);

   put("message", "下单成功");

   put("name", userInfo.getName());

   put("currentTime", new DateTime().toString("yyyy-MM-dd HH:mm"));

   // 生产消息

   rabbitService.sendMessage(RabbitConstant.EXCHANGE_DIRECT_MSM, RabbitConstant.ROUTING_MSM, param);

  

 

  以上就是SpringBoot整合RabbitMQ()的详细内容,想要了解更多 SpringBoot整合RabbitMQ的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: