rabbitMq快速入门总结


一.管理后台登陆 http://ip:15672/#/
用户名:默认 guest
密码:默认 guest

二.五种工作模式:
             简单模式(无交换机)
             work(工作队列模式)
             routing(路由模式)  交换机type=direct   headers
             public(发布订阅模式)  交换机type=fanout
             topic(通配符模式)     交换机type=topic
             rpc

三.优缺点

ActiveMQ
  单机吞吐量:万级

  topic数量都吞吐量的影响:

  时效性:ms级

  可用性:高,基于主从架构实现高可用性

  消息可靠性:有较低的概率丢失数据

  功能支持:MQ领域的功能极其完备

  总结:

    非常成熟,功能强大,在早些年业内大量的公司以及项目中都有应用  

    偶尔会有较低概率丢失消息  

    现在社区以及国内应用都越来越少,官方社区现在对ActiveMQ 5.x维护越来越少,几个月才发布一个版本   

    主要是基于解耦和异步来用的,较少在大规模吞吐的场景中使用

 

RabbitMQ
  单机吞吐量:万级

  topic数量都吞吐量的影响:

  时效性:微秒级,延时低是一大特点。

  可用性:高,基于主从架构实现高可用性

  消息可靠性:

  功能支持:基于erlang开发,所以并发能力很强,性能极其好,延时很低

  总结:  

    erlang语言开发,性能极其好,延时很低;  

    吞吐量到万级,MQ功能比较完备  

    开源提供的管理界面非常棒,用起来很好用  

    社区相对比较活跃,几乎每个月都发布几个版本分  

    在国内一些互联网公司近几年用rabbitmq也比较多一些   但是问题也是显而易见的,RabbitMQ确实吞吐量会低一些,这是因为他做的实现机制比较重。  

    erlang开发,很难去看懂源码,基本职能依赖于开源社区的快速维护和修复bug。  

    rabbitmq集群动态扩展会很麻烦,不过这个我觉得还好。其实主要是erlang语言本身带来的问题。很难读源码,很难定制和掌控。
    
    
四.应用
1.引入坐标
 
            org.springframework.boot
            spring-boot-starter-amqp
    

  
2.增加配置文件
  spring.rabbitmq.host=47.96.21.193
  spring.rabbitmq.port=5672
  spring.rabbitmq.username=test
  spring.rabbitmq.password=qwe123
  spring.rabbitmq.virtual-host=/neptune.test
  spring.rabbitmq.connection-timeout=20000
  
3.生产者(交换机,路由,队列都在管理页面创建好了,也可以在配置类中声明)
  @Service
  public class Send  { 
  
    private static final String EXCHANGE = "topic.python.exchange";
    private static final String ROUTING_KEY = "topic.python.rout.key";
    public static final String deepthimage = "deepthimage";
    public static final String superimage = "superimage";
    public static final String beautifulimage = "beautifulimage";
    @Autowired
    private AmqpTemplate rabbitTemplate;
    public void sindSuperImg(JSONObject mqJson) {
      mqJson.put("job_type", superimage);
      this.rabbitTemplate.convertAndSend(EXCHANGE, ROUTING_KEY, mqJson.toJSONString());
    }
    
  }
  
4.消费者(交换机,路由,队列都在管理页面创建好了,也可以在配置类中声明)
  @Service
  public class Recive extends BaseService {

    @Autowired
    private UserSuperImgMapper userSuperImgMapper;

    private static final String EXCHANGE = "topic.pythoncallback.exchange";
    private static final String EXCHANGE_DURABLE = "true";
    private static final String QUEUE_NAME = "pythoncallback.queue";
    private static final String QUEUE_DURABLE = "true";
    private static final String ROUTING_KEY = "topic.pythoncallback.rout.key";

    @RabbitListener(bindings = {
            @QueueBinding(exchange = @Exchange(type = ExchangeTypes.TOPIC, value = EXCHANGE, durable = EXCHANGE_DURABLE), value = @Queue(value = QUEUE_NAME, durable = QUEUE_DURABLE), key = ROUTING_KEY) })
    public void process(String json) {
        //处理业务逻辑
    }
  }
  
  
  

你可能感兴趣的:(JavaEE)