一.管理后台登陆 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.引入坐标

<dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-amqp</artifactId>
     </dependency>


  
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) {
         //处理业务逻辑
     }
   }