• 因为是分布式微服务项目,所以发送方在一个微服务,接收方在另外的一个微服务,在发送方,导入RabbitMQ依赖包
 <!--RabbitMQ依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
  • 在yml配置RabbitMQ的ip端口号名字密码等
server:port: 80
#===mq start===
spring:application:name: course-server #服务名rabbitmq:host: 192.168.0.145port: 5672username: yzpassword: cgm888666addresses: 192.168.0.145listener:direct:acknowledge-mode: manual #手动签收template:receive-timeout: 30000reply-timeout: 30000virtual-host: /
#===mq end===
  • 写配置类:创建队列交换机,并将队列绑定到交换机
  • 注意打上注解让spring扫描到配置,还有导包正确
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {//三个队列名字  短信 邮件 站内信//短信private static final String QUEUE_SMS = "queue_sms";//邮件private static final String QUEUE_EMAIL = "queue_email";//站内信private static final String QUEUE_SYSTEM = "queue_system";//交换机名称public static final String EXCHANGE_TOPIC = "exchange_topic";//定义交换机@Bean(EXCHANGE_TOPIC)public Exchange exchange() {return ExchangeBuilder.topicExchange(EXCHANGE_TOPIC).durable(true).build();}//定义邮件队列@Bean(QUEUE_EMAIL)public Queue queueEmail() {return new Queue(QUEUE_EMAIL, true);}//定义短信队列@Bean(QUEUE_SMS)public Queue queueSMS() {return new Queue(QUEUE_SMS, true);}//定义队列@Bean(QUEUE_SYSTEM)public Queue queueSystem() {return new Queue(QUEUE_SYSTEM, true);}//将队列绑定到交换机@Beanpublic Binding bindingEmail(@Qualifier(QUEUE_EMAIL) Queue queue,@Qualifier(EXCHANGE_TOPIC) Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with("message_Email").noargs();}@Beanpublic Binding bindingSms(@Qualifier(QUEUE_SMS) Queue queue,@Qualifier(EXCHANGE_TOPIC) Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with("message_Sms").noargs();}@Beanpublic Binding bindingSystem(@Qualifier(QUEUE_SYSTEM) Queue queue,@Qualifier(EXCHANGE_TOPIC) Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with("message_System").noargs();}}
  • 发送消息:然后在课程服务层,课程上线以后通知用户(不同的业务需求,可以在不同的情况下去通知用户)
/*** 课程上线* @param id 课程id*/@Overridepublic void onLineCourse(Long id) {//根据id查询课程Course course = baseMapper.selectById(id);//判断课程是否是下线状态  如果不是就直接结束if(course.getStatus()==Course.ONLINE_STATUS||course.getStatus()==null){logger.error("课程已经上线!");return;}//修改数据库课程状态为上线course.setStatus(Course.ONLINE_STATUS);baseMapper.updateById(course);//存到es//写es控制层和feign接口CourseDetail courseDetail = courseDetailMapper.selectById(id);CourseMarket courseMarket = courseMarketMapper.selectById(id);//将course装转成doc对象CourseDoc courseDoc=new CourseDoc();courseDoc.setSearchField(course.getName()+courseDetail.getDescription());BeanUtils.copyProperties(course,courseDoc);BeanUtils.copyProperties(courseDetail,courseDoc);BeanUtils.copyProperties(courseMarket,courseDoc);courseDoc.setPic(fastDfsUrl+course.getPic());System.out.println(courseDoc.getPic());AjaxResult ajaxResult = commonFeignClient.save(courseDoc);System.out.println(courseDetail);System.out.println(courseMarket);System.out.println(courseDoc);if(!ajaxResult.isSuccess()){logger.error("存入Es失败!");}pushMessage(course);}/*** 课程上线成功以后发送消息通知用户* @param course*/private void pushMessage(Course course) {//发送消息rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_TOPIC,"message_Email",course.getName());//message_Email:队列绑定在交换机时设置的routingKey,发送的消息内容:course.getName()rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_TOPIC,"message_Sms",course.getName());rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_TOPIC,"message_System",course.getName());}
  • 在接收方导入RabbitMQ依赖包
 <!--RabbitMQ依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>
  • 在yml配置RabbitMQ
spring:application:name: course-server #服务名##配置rabbitmqrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtualHost: /listener:simple:acknowledge-mode: manual #手动签收
  • 写消息处理类,监听队列,然后对用户发送邮件短信,以及站内信等
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MQHandler {//短信private static final String QUEUE_SMS = "queue_sms";//邮件private static final String QUEUE_EMAIL = "queue_email";//站内信private static final String QUEUE_SYSTEM = "queue_system";//监听队列接收消息@RabbitListener(queues = QUEUE_SMS)public void message_Sms(String msg, Message message, Channel channel){//获取用户电话给用户发送短信System.out.println("发送短信成功:"+msg);}@RabbitListener(queues = QUEUE_EMAIL)public void message_Email(String msg, Message message,Channel channel){//获取用户的邮箱 用户id  使用丰富邮箱发送超链接System.out.println("邮箱发送成功:"+msg);}@RabbitListener(queues = QUEUE_SYSTEM)public void meassge_System(String msg,Message message,Channel channel){//站内消息存入表中,状态未处理System.out.println("站内消息发送成功:"+msg);}
}
  • 注意点:MQ配置必须正确,@Bean注解 不要忘了。

微服务架构集成RabbitMQ给用户推送消息(发送短信,发送邮件,发送站内信息)相关推荐

  1. php 极光定时推送消息,极光短信- 短信定时发送 API - 极光文档

    短信定时发送 API 支持提交.修改.查询和删除模板短信定时发送任务 HTTP 验证 使用 HTTP Basic Authentication 的方式做访问授权.这样整个 API 请求可以使用常见的 ...

  2. Java给特定用户发通知_微信公众平台向特定用户推送消息

    最近研究微信公众平台,这里整理了一下向特定用户推送消息的思路 一.首先需要将微信的openid与系统用户绑定. 在用户关注公众平台的时候,回复一个链接,要求用户绑定,可以设计如下消息进行回复,(ope ...

  3. php公众号向多个用户推送消息,如何实现微信公众号给指定互动用户推送多次消息?...

    1.微号帮平台注册账号.登录.授权公众号 2.创建推送信息 进入功能管理后,找到高级功能,选择48小时信息推送,点击添加推送信息,支持微信公众号给指定互动用户推送多次消息. 3.微号帮平台:编辑推送消 ...

  4. 微信公众号为指定openid用户推送消息

    微信公众号为指定openid用户推送消息 微信提供的开放接口中,有两个给指定openid的用户发送信息的接口,适用场景应该是向 预约用户或者中奖用户发送消息. 第一个接口:客服发送消息 请求方式: P ...

  5. 微信公众号怎么推送消息_微信公众号发送消息

    A.模板消息发送 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 备注 ...

  6. TP5 给已关注微信公众号的用户推送消息

    登录微信公众平台 点击左侧模板消息,在从模版库中添加找到类似的模板点详情后添加. 若没有找到能用的,可自己创建(预计审核7~14天) 以下TP5代码 class Message extends Bas ...

  7. 企业微信推送消息延迟_企业微信发送应用消息,员工无法接收到推送消息。

    请求消息体:[touser=18666211235,toparty=,totag=,agentid=1000040,msgtype=text,content=,media_id=,title=,des ...

  8. Android开发之推送服务(三) 集成Oppo和vivo推送

    Oppo推送服务,也是在Oppo手机中使用的比较多.而且现在Oppo和Vivo两款手机最早提出美颜功能,所以这两款手机在市场上的占有率还是比较高的. Oppo推送目前已经开发注册,Vivo目前只对部分 ...

  9. 微信公众平台向特定用户推送消息

    一.首先需要将微信的openid与系统用户绑定. 在用户关注公众平台的时候,回复一个链接,要求用户绑定,可以设计如下消息进行回复,(openid最好进行加密处理,后者还需要用这个字段绑定fakeid) ...

最新文章

  1. Scrapy框架-去重原理讲解、数据收集以及信号量知识
  2. 忘记Windows系统密码不用急 这个办法轻松帮你破解
  3. AS3.0第一个实例:(Hello World)
  4. Android实现通用的ActivityGroup(效果类似Android微博客户端主界面),...
  5. Java中文乱码问题(转)
  6. 菜鸟教程android布局,Android菜鸟级教程
  7. 斜挎包长度到哪里合适_斜挎包带子多长合适 看个人身高
  8. 荣耀推出MOSCHINO联名款荣耀20 PRO手机 售价3799元
  9. 获取设置套接字选项:getsockopt, setsockopt
  10. F10-MYSQL的yum源码
  11. hdu4045(递推)
  12. Nginx 常用配置,避坑指南!
  13. jquery on()方法绑定多个选择器,多个事件
  14. matlab灰色关联分析,灰色关联度分析(为什么不显示图像)大佬们帮我看看
  15. eclipse开发webservice实例及问题解决
  16. Spider爬虫笔记[更新中...]
  17. 跌疯了,理性投资人会这样做 附国内外免费股票数据源
  18. 格林第一季/全集Grimm迅雷下载
  19. 4种解决json日期格式问题的办法
  20. 7-1 计算职工工资c语言,C语言职工工资管理系统

热门文章

  1. 【cnpm】cnpm的安装方法(附详细步骤)
  2. 笔记:源码修改开放5555端口
  3. 我们可以用TeamViewer免费版做什么?
  4. 【Python爬虫系列教程 41-100】猫眼电影字体加密破解
  5. python 中右移、左移运算符的作用
  6. Module 模块化
  7. c语言词典课程设计报告,英汉电子词典C语言课程设计
  8. ChatGPT初体验step by step:ChatGPT解决人类提出的数理逻辑问题,Python编程实践
  9. html中onload的使用
  10. 关于云原生入门技能树图片资源展示问题