前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AMQP-RabbitMQ/1/概念/一对一简单模型

AMQP-RabbitMQ/1/概念/一对一简单模型

作者头像
喜欢天文的pony站长
发布2020-06-29 12:09:12
4990
发布2020-06-29 12:09:12
举报
文章被收录于专栏:RabbitMQ实战RabbitMQ实战

# JMS, AMQP, MQTT的区别与联系

  • JMS Java消息传递服务(Java Messaging Service )
  • AMQP 高级消息队列协议(Advanced Message Queueing Protocol
  • MQTT 消息队列遥测传输(Message Queueing Telemetry Transport )

简单理解:

  • JMS是专门为Java设计的一套消息服务API,像 ActiveMQ就是对它的实现
  • AMQP为了解决不同平台之间的通信问题,定义了一种名为 amqp通信协议,从而实现平台和语言无关性。
  • MQTT也是一种通信协议。相比于AMQP的复杂性,它简单的多。所以 amqp用于处理相对较重的任务,如两个系统平台之间的消息传输。而 mqtt因为非常轻量,所以大量应用于物联网

# RabbitMQ常用命令

  • 修改密码 rabbitmqctl change_passwordUsernameNewpassword
  • 显示所有用户 rabbitmqctl list_users
  • 启动 rabbitmq-server start
  • 关闭 rabbitmqctl stop
  • homebrew安装配置文件地址 /usr/local/etc/rabbitmq/rabbitmq-env.conf
  • 管理平台地址 http://localhost:15672/

1. 简单模型

The simplest thing that does something

  • 模型图示
  • 生产者
代码语言:javascript
复制
package com.futao.springmvcdemo.mq.rabbit.simple;
 


 
import com.futao.springmvcdemo.mq.rabbit.RabbitMqConnectionTools;
 
import com.futao.springmvcdemo.mq.rabbit.RabbitMqQueueEnum;
 
import com.rabbitmq.client.Channel;
 
import com.rabbitmq.client.Connection;
 
import lombok.Cleanup;
 
import lombok.SneakyThrows;
 
import lombok.extern.slf4j.Slf4j;
 


 
/**
 
 * 简单发送者
 
 *
 
 * @author futao
 
 * Created on 2019-04-22.
 
 */
 
@Slf4j
 
public class Send {
 
 @SneakyThrows
 
 public static void main(String[] args) {
 
 @Cleanup
 
 Connection connection = RabbitMqConnectionTools.getConnection();
 
 @Cleanup
 
 Channel channel = connection.createChannel();
 
 //定义一个队列
 
        channel.queueDeclare(RabbitMqQueueEnum.SIMPLE.getQueueName(), false, false, false, null);
 
 String msg = "Hello RabbitMq!";
 
        channel.basicPublish("", RabbitMqQueueEnum.SIMPLE.getQueueName(), null, msg.getBytes());
 
        log.info("Send msg:[{}] success", msg);
 
 }
 
}
 
  • 消费者

代码语言:javascript
复制
package com.futao.springmvcdemo.mq.rabbit.simple;
 


 
import com.futao.springmvcdemo.mq.rabbit.RabbitMqConnectionTools;
 
import com.futao.springmvcdemo.mq.rabbit.RabbitMqQueueEnum;
 
import com.rabbitmq.client.Channel;
 
import com.rabbitmq.client.DeliverCallback;
 
import lombok.SneakyThrows;
 
import lombok.extern.slf4j.Slf4j;
 


 
/**
 
 * 简单消费者
 
 *
 
 * @author futao
 
 * Created on 2019-04-22.
 
 */
 
@Slf4j
 
public class Recv {
 
 @SneakyThrows
 
 public static void main(String[] args) {
 
 Channel channel = RabbitMqConnectionTools.getChannel();
 
        channel.queueDeclare(RabbitMqQueueEnum.SIMPLE.getQueueName(), false, false, false, null);
 
        log.info("Waiting for message...");
 
 DeliverCallback deliverCallback = ((consumerTag, message) -> {
 
            log.info("收到消息:[{}],tag:[{}]", new java.lang.String(message.getBody()), consumerTag);
 
 });
 
        channel.basicConsume(RabbitMqQueueEnum.SIMPLE.getQueueName(), true, deliverCallback, consumerTag -> {
 
 });
 
 }
 
}
 
  • 特点:一对一。一个生产者,一个消费者。

# 通用代码

  • 工具类 - 链接工厂

代码语言:javascript
复制
package com.futao.springmvcdemo.mq.rabbit;
 


 
import com.rabbitmq.client.Channel;
 
import com.rabbitmq.client.Connection;
 
import com.rabbitmq.client.ConnectionFactory;
 
import lombok.SneakyThrows;
 


 
import java.io.IOException;
 
import java.util.concurrent.TimeoutException;
 


 
/**
 
 * rabbitMq配置类
 
 *
 
 * @author futao
 
 * Created on 2019-04-19.
 
 */
 
public class RabbitMqConnectionTools {
 
 /**
 
     * 获取链接
 
     *
 
     * @return
 
     * @throws IOException
 
     * @throws TimeoutException
 
     */
 
 public static Connection getConnection() {
 
 try {
 
 return getConnectionFactory().newConnection();
 
 } catch (IOException | TimeoutException e) {
 
            e.printStackTrace();
 
 throw new RuntimeException(e.getMessage(), e);
 
 }
 
 }
 


 
 /**
 
     * 连接工厂
 
     *
 
     * @return
 
     */
 
 private static ConnectionFactory getConnectionFactory() {
 
 ConnectionFactory factory = new ConnectionFactory();
 
        factory.setHost("localhost");
 
        factory.setPort(5672);
 
        factory.setUsername("futao");
 
        factory.setPassword("123456");
 
        factory.setVirtualHost("/springmvc");
 
 return factory;
 
 }
 


 
 /**
 
     * 创建并获取通道
 
     *
 
     * @return
 
     */
 
 @SneakyThrows
 
 public static Channel getChannel() {
 
 Connection connection = RabbitMqConnectionTools.getConnection();
 
 return connection.createChannel();
 
 }
 
}
 
  • 枚举类 - RabbitMqQueueEnum队列名称

代码语言:javascript
复制
package com.futao.springmvcdemo.mq.rabbit;
 


 
import lombok.AllArgsConstructor;
 
import lombok.Getter;
 


 
/**
 
 * queue名称枚举
 
 *
 
 * @author futao
 
 * Created on 2019-04-19.
 
 */
 
@Getter
 
@AllArgsConstructor
 
public enum RabbitMqQueueEnum {
 


 
 /**
 
     * 简单queue
 
     */
 
    SIMPLE("simple-queue"),
 
 /**
 
     * WorkQueue 工作队列
 
     */
 
    WORK_QUEUE("work-queue"),
 
 /**
 
     * 发布订阅-fanout
 
     */
 
    EXCHANGE_QUEUE_FANOUT_ONE("exchange-queue-fanout-1"),
 


 
    EXCHANGE_QUEUE_FANOUT_TWO("exchange-queue-fanout-2"),
 


 
    EXCHANGE_QUEUE_DIRECT_ONE("exchange-queue-direct-1"),
 
    EXCHANGE_QUEUE_DIRECT_TWO("exchange-queue-direct-2"),
 


 
    EXCHANGE_QUEUE_TOPIC_ONE("exchange-queue-topic-1"),
 
    EXCHANGE_QUEUE_TOPIC_TWO("exchange-queue-topic-2"),
 
    EXCHANGE_QUEUE_TOPIC_THREE("exchange-queue-topic-3"),
 
    EXCHANGE_QUEUE_TOPIC_FOUR("exchange-queue-topic-4"),
 


 
 /**
 
     * RPC队列
 
     */
 
    RPC_QUEUE("rpc-queue");
 


 


 
 /**
 
     * queue名称
 
     */
 
 private String queueName;
 
}
 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喜欢天文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • # JMS, AMQP, MQTT的区别与联系
  • # RabbitMQ常用命令
  • 1. 简单模型
  • # 通用代码
相关产品与服务
消息队列 CMQ 版
消息队列 CMQ 版(TDMQ for CMQ,简称 TDMQ CMQ 版)是一款分布式高可用的消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档