设为首页 收藏本站
查看: 1299|回复: 0

[经验分享] spring boot / cloud (九) 使用rabbitmq消息中间件

[复制链接]

尚未签到

发表于 2017-12-9 15:32:37 | 显示全部楼层 |阅读模式
spring boot / cloud (九) 使用rabbitmq消息中间件

前言

rabbitmq介绍:

  RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。


amqp介绍:

  即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。


思路
  基于spring boot的特性连接rabbitmq,并作出如下样例:


  •   配置

  •   发布方样例

  •   消费方样例

实现

1.配置
  引入maven依赖
<dependency>  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  
</dependency>
  

  
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-amqp</artifactId>
  
</dependency>
  编写config配置类(默认情况下是不用做任何配置的,这里有配置是因为,它默认是用的二进制做的消息传输,这里的配置是改为json传输)
@Configuration  
public>  

  @Bean
  public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactoryPlus(
  SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory,
  Jackson2JsonMessageConverter jackson2JsonMessageConverter) {
  rabbitListenerContainerFactory.setMessageConverter(jackson2JsonMessageConverter);
  return rabbitListenerContainerFactory;
  }
  

  @Bean
  public Jackson2JsonMessageConverter jackson2JsonMessageConverter(ObjectMapper xssObjectMapper) {
  return new Jackson2JsonMessageConverter(xssObjectMapper);
  }
  

  
}
  编写配置文件
  

spring.rabbitmq.host=192.168.134.100  
spring.rabbitmq.port=5672
  
spring.rabbitmq.username=dev_udf-sample
  
spring.rabbitmq.password=1qazxsw2
  
spring.rabbitmq.virtual-host=/dev_udf-sample
  
spring.rabbitmq.template.retry.enabled=true #发送方是否重试
  
spring.rabbitmq.listener.retry.enabled=true #消费方是否重试
  

  定义公共的消息类
public>private static final long serialVersionUID = 1L;
  //消息ID

  private String>  ....其他自定义
  
}

2.发布方样例
  创建Exchange,这里使用的是DirectExchange,exchange主要是定义路由规则的,还有其他不同的路由规则实现,如:TopicExchange,他们都继承至AbstractExchange
  @Bean  public DirectExchange testExchange() {
  return new DirectExchange("test_exchange");
  }
  使用AmqpTemplate发送异步消息(RoutingKey则是指定消息的路由键,不同的路由键可被不同的消费方消费)
  @Autowired  private AmqpTemplate amqpTemplate;
  //然后调用发送方法发送消息
  this.amqpTemplate.convertAndSend("test_exchange", "testRoutingKey", new RabbitmqMessage<String>("test"));

3.消费方样例
  创建消费队列,死信队列,以及与exchange的绑定关系
  //消费队列  @Bean
  public Queue testConsume() {
  //死信exchange与上面的定义方式一样
  Map<String, Object> args = new HashMap<>();
  args.put("x-dead-letter-exchange","test_exchange_dlx");
  args.put("x-dead-letter-routing-key","testRoutingKey_dlx");
  return new Queue("test_consume", true, false, false, args);
  }
  //死信消费队列
  @Bean
  public Queue testConsumeDlx() {
  return new Queue("test_consume_dlx");
  }
  //消费队列绑定
  @Bean
  public Binding testConsumeBinding() {
  return new Binding("test_consume", DestinationType.QUEUE,
  "test_exchange","testRoutingKey", null);
  }
  //死信消费队列绑定
  @Bean
  public Binding testConsumeDlxBinding() {
  return new Binding("test_consume_dlx", DestinationType.QUEUE,
  "test_exchange_dlx","testRoutingKey_dlx", null);
  }
  消费消息
  @RabbitListener(queues = "test_consume")  public void process(Message<String> message) {
  log.info(message);
  }

代码仓库 (博客配套代码)


  •   udf-starter : 基础项目,脚手架,框架

  •   udf-sample : 集成样例

结束
  以上演示了rabbitmq在spring boot中的配置,以及发送方和消费方的样例,在后续的章节中,会找机会介绍rabbitmq的搭建以及配置.
  想获得最快更新,请关注公众号
DSC0000.jpg

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-422448-1-1.html 上篇帖子: 安装,配置 SMTP 服务器 下篇帖子: Rabbit mq订阅方式获取消息并可设置持久化
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表