测试mq,简单代码

一、创建一个生产者(发消息)

        

package com.chujian.rabbitmq.chat;

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

public class ChatSender {

  private final static String EXCHANGE_NAME = "chat";
  private final static String ROUTING_KEY = "dev.101";

  public static void main(String[] argv) throws Exception {
    ConnectionFactory factory = new ConnectionFactory();
    //ip ;账号 ; 密码
    factory.setHost("**.**.**.**");
    factory.setUsername("**");
    factory.setPassword("***");

    Connection connection = factory.newConnection();
//    创建通道
    Channel channel = connection.createChannel();

    //指定一个topic类型的exchange
    channel.exchangeDeclare(EXCHANGE_NAME, "topic");
    String message = "{\"platformId\":\"dev\",\"serverId\":101,\"message\":\"hello\",\"senderId\":328199822844625205,\"messageType\":8,\"senderName\":\"李老三\",\"menpai\":50,\"level\":251,\"roleId\":251,\"sendTime\":\"2018-12-01 17:26:13.532\",\"sceneId\":0,\"targetId\":328199822844625244}";
    //这里拿到routing key
    for (int i = 0; i < 5000; i++) {
//  参数1:交换机名称   参数2:路由键(#为万能通用符)
      channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());
      System.out.println(" [x] Sent '" + ROUTING_KEY + "':'" + message + "'");
      Thread.sleep(10000);
    }
    connection.close();
  }

}

二、创建一个消费者(收消息)

package com.chujian.rabbitmq.chat;

import java.util.Map;

import com.chujian.util.GsonUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;

public class CharReceiver {

	private static final String EXCHANGE_NAME = "chat";
	
	public static void main(String[] argv) throws Exception{
		argv = new String[]{"#"};
		ConnectionFactory factory = new ConnectionFactory();
//ip
      factory.setHost("**.**.**.172");
//账号
      factory.setUsername("**");
//密码
      factory.setPassword("**");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        //指定一个topic类型的exchange
        channel.exchangeDeclare(EXCHANGE_NAME, "topic");
        String queueName = channel.queueDeclare().getQueue();

        if (argv.length < 1){
            System.err.println("Usage: ReceiveLogsTopic [binding_key]...");
            System.exit(1);
        }

        //参数1:通道名称   参数2:交换机名称   参数2:路由键(#为万能通用符)
       
         channel.queueBind(queueName, EXCHANGE_NAME, "#");
       

        System.out.println(" [*] Waiting for messages. ");
        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
//收到的消息
            String message = new String(delivery.getBody());
//路由键
            String routingKey = delivery.getEnvelope().getRoutingKey();
//格式化收到的json 转换为map
            Map<String, Object> gsonToMaps = GsonUtil.GsonToMaps(message);
            String sss = gsonToMaps.get("serverId").toString();

            System.out.println(" [x] Received '" + routingKey + "':'" + message + "'");
            
        }
	}
}

三、内容讲解:

   1、 本次测试使用的是rabbitmq比较常用的主题模式(topic模式),该模式和路由模式类似,消费者需要匹配到相同通道交换机下面的路由键的消费者,方可接收到生产者发送的消息;

   2、我在消费者中使用的通用符#,#:可以匹配任意的路由键。如果写为info.#,可以匹配到以info.开头的路由键;还有*,也是通配符,但是*只可以匹配一个单词或字母。比如info.*就只能匹配到info.后面一个单词或字母,如果路由键为info.test.dev,info.*就不能匹配到了只能用info.#才能匹配

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值