RabbitMq应用

springBoot中rabbitMq配置
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=123456
spring.rabbitmq.virtual-host=/

#\u5065\u5EB7\u76D1\u63A7 -\u7ED3\u675F
#开启消息发送确认
spring.rabbitmq.publisher-confirms=true
spring.rabbitmq.publisher-returns=true
#返回无法插入队列的消息
spring.rabbitmq.template.mandatory=true
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss

一.导入rabbitMq依赖
 <dependency>
  <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-amqp</artifactId>
 </dependency>.定义一个队列并把该队列绑定在交换机上
 package com.medicine.management_side.config;

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

@Configuration
public class FanoutRabbitConfig {
 /**
 * 定义队列c,服务于挂号接口
 * @return
*/
    @Bean
    public Queue cMessage() {
        return new Queue("queue_regist");
    }
   /**
     * 定义交换机
     * @return
     */
    @Bean
    FanoutExchange fanoutExchanges() {
        return new FanoutExchange("queueRegistExchange");
    }
   
 /**
 * 将队列和交换机进行绑定
 * @return
  */
    @Bean
    Binding bindingExchangeC() {
        return BindingBuilder.bind(cMessage()).to(fanoutExchanges());
    }
}.定义生产者
package com.medicine.management_side.websocket;

import com.medicine.management_side.base.BaseController;
import com.medicine.management_side.utils.JsonUtil;
import com.medicine.management_side.utils.PageData;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MsgSenderFanout extends BaseController {

    @Autowired
    private AmqpTemplate rabbitTemplate;

    /**
     * 接收消息,并将消息传到mq交换机上,绑定了该交换机的队列的消费者都可收到该消息
     * @param message
     */

    public void sendRegist(PageData pageData) {

       String jsonstr=JsonUtil.readObject2Json(pageData);
        System.out.println("jsonstr : " + jsonstr);
        this.rabbitTemplate.convertAndSend("queueRegistExchange","queue_regist",jsonstr);
    }
}.定义消费者
package com.medicine.management_side.mobileController;
import com.medicine.management_side.base.BaseController;
import com.medicine.management_side.service.PatientService;
import com.medicine.management_side.utils.JsonUtil;
import com.medicine.management_side.utils.PageData;
import com.medicine.management_side.utils.RedisUtil;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@Component
@RabbitListener(queues = "queue_regist")
    public class MobileMqController extends BaseController  {
    @Autowired
    private PatientService patientService;
    @Resource
    private RedisUtil redisUtil;
    @RabbitHandler
    public void process(String jsonstr) {

        try {
            System.out.println("消费  : " +jsonstr);
            PageData pageData=(PageData) JsonUtil.readJson2Object(jsonstr,PageData.class);
            char c = (char) ('A' + Math.random() * ('Z' - 'A' + 1));
            String s = Character.toString(c);//产生的随机字符
            pageData.put("random", s);
            String registNubmer=pageData.get("registNubmer").toString();
            pageData.put("registNubmer", registNubmer.replace("_",s));
            patientService.newRegisterNum(pageData);//插入挂号表
            PageData patientData = new PageData();
            String id =pageData.get("id").toString();
            patientData.put("uuid",id);


            if("1.0".equals(String.valueOf(pageData.get("isPayment")))){//1是已支付
                PageData datas = patientService.patientRegister(patientData);//挂号基本信息数据

                List<Map<String, Object>> paImg = new LinkedList<Map<String, Object>>();//存放挂号图片用
                datas.put("list", paImg);
                datas.put("doctorId", "");//医生id
                datas.put("subscribeTime", pageData.get("subscribeTime").toString());//问诊时间
                //把对象转成json字符串
                String jsonData = JsonUtil.readObject2Json(datas);

                //key是诊室id item是挂号id  value是挂号信息的json字符串放到redis
                boolean isSaves = redisUtil.hset(pageData.get("consultationId").toString(), id, jsonData);//目前这里面存放的是预约和今日挂号
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ是一个开源的消息中间件,它可以用于实现应用程序之间的解耦。通过使用RabbitMQ应用程序可以通过发送和接收消息来进行通信,而不需要直接依赖于彼此的存在和状态。 以下是RabbitMQ应用解耦的一些常见场景和方法: 1. 发布/订阅模式:发布/订阅模式是一种常见的解耦方式,其中一个应用程序(发布者)将消息发送到RabbitMQ的交换机,而其他应用程序(订阅者)则从交换机订阅并接收消息。这样,发布者和订阅者之间不需要直接通信,它们只需要通过交换机进行消息传递。 2. 队列模式:队列模式是另一种常见的解耦方式,其中一个应用程序将消息发送到RabbitMQ的队列中,而其他应用程序则从队列中接收消息。这样,发送者和接收者之间不需要直接通信,它们只需要通过队列进行消息传递。 3. 路由模式:路由模式是一种更灵活的解耦方式,其中消息根据路由键被发送到不同的队列。发送者可以指定消息的路由键,而接收者可以根据路由键选择性地接收消息。这样,发送者和接收者之间可以根据需要进行灵活的消息传递。 4. 主题模式:主题模式是一种更高级的解耦方式,其中消息根据主题进行发布和订阅。发送者可以指定消息的主题,而接收者可以根据主题选择性地接收消息。这样,发送者和接收者之间可以根据主题进行灵活的消息传递。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值