
1.生产者代码编写
/**
* 发送消息
*/
public class Producer_PubSub {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 2.设置参数
factory.setHost("192.168.10.11");// ip 默认值 localhost
factory.setPort(5672); // 端口 默认值 5672
factory.setVirtualHost("/lei404"); // 虚拟机 默认值/
factory.setUsername("lei"); // 用户名 默认值 guest
factory.setPassword("lei404"); // 密码 默认值 guest
// 3.创建连接connection
Connection connection = factory.newConnection();
// 4.创建channel
Channel channel = connection.createChannel();
// 5.创建交换机
// exchangeDeclare(String exchange,交换机名称
// BuiltinExchangeType type,交换机类型 DIRECT("direct")定向, FANOUT("fanout")广播, TOPIC("topic") 通配符方式, HEADERS("headers") 参数匹配;
// boolean durable,是否持久化
// boolean autoDelete, 自动删除
// boolean internal,内部使用,一般false
// Map<String, Object> arguments) throws IOException;参数列表
String exchangeName= "test_fanout";
channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT, true, false, false, null);
// 6.创建队列
String queue1Name = "test_fanout_queue1";
String queue2Name = "test_fanout_queue2";
channel.queueDeclare(queue1Name, true, false, false, null);
channel.queueDeclare(queue2Name, true, false, false, null);
// 7.绑定队列和交换机
// queueBind(String queue,队列名称
// String exchange, 交换机名称
// String routingKey 路由键 如果交换机的类型为fanout,routingKey设置为""
channel.queueBind(queue1Name, exchangeName, "");
channel.queueBind(queue2Name, exchangeName, "");
// 8.发送消息
String body = "日志信息";
channel.basicPublish(exchangeName, "", null, body.getBytes());
// 9.释放资源
channel.close();
connection.close();
}
}
2.消费者代码编写
public class Consumer_PubSub1 {
public static void main(String[] args) throws IOException, TimeoutException {
// 1.创建连接工厂
ConnectionFactory factory = new ConnectionFactory();
// 2.设置参数
factory.setHost("192.168.10.11");// ip 默认值 localhost
factory.setPort(5672); // 端口 默认值 5672
factory.setVirtualHost("/lei404"); // 虚拟机 默认值/
factory.setUsername("lei"); // 用户名 默认值 guest
factory.setPassword("lei404"); // 密码 默认值 guest
// 3.创建连接connection
Connection connection = factory.newConnection();
// 4.创建channel
Channel channel = connection.createChannel();
// 6.创建队列
String queue1Name = "test_fanout_queue1";
String queue2Name = "test_fanout_queue2";
// 6.接收消息
// basicConsume(
// String queue, 队列名称
// boolean autoAck, 是否自动确认
// Consumer callback 回调函数)
Consumer consumer = new DefaultConsumer(channel){
/**
* 回调方法,当收到消息后会自动执行该方法
* @param consumerTag 消息的标识
* @param envelope 获取一些信息,交换机的信息,路由key的信息
* @param properties 配置信息
* @param body 真实的数据
* @throws IOException
*/
@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
// System.out.println("consumerTag:" + consumerTag);
// System.out.println("Exchange:" + envelope.getExchange());
// System.out.println("RoutingKey:" + envelope.getRoutingKey());
// System.out.println("properties:" + properties);
System.out.println("body:" + new String(body));
System.out.println("123");
}
};
channel.basicConsume("queue1Name", true, consumer);
// 释放资源?不要关闭资源,实时监听,不能关闭资源
// channel.close();
// connection.close();
}
}
2082

被折叠的 条评论
为什么被折叠?



