RabbitMq的helloworld
结构
rabbitmq作为一个消息中间件,可以从生产者手中获得和存储消息,并被消费者带走。
1. 创建maven工程,并导入依赖
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.8.0</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.3.0-alpha5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
</dependencies>
2. 创建生产者对象
public class producer {
public final static String QUEUE_NAME="hello";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory=new ConnectionFactory();
factory.setHost("****.****.****.****");
factory.setUsername("admin");
factory.setPassword("admin");
Connection connection=factory.newConnection();
Channel channel=connection.createChannel();
/*生成一个队列
* 1. 队列名称
* 2. 队列消息是否持久化,默认消息存储在内存中
* 3. 该队列是否共享,即供多个消费者消费,为true可共享
* 4. 是否自动删除,当最后一个连接断开以后,是否自动删除数据
* 5. 其他参数*/
channel.queueDeclare(QUEUE_NAME,false,false,false,null);
String message="hello world";
/*发送一个基础消息
* 1.发送到哪一个交换机
* 2.路由的key是哪一个,本次是队列名称
* 3.其他参数消息
* 4.发送的消息实体
* */
channel.basicPublish("",QUEUE_NAME,null,message.getBytes());
System.out.println("发送成功");
}
}
3. 将Rabbitmq部署到ubuntu虚拟机上,并开启服务
可以在web界面进行管理
4. 运行producer程序,发送数据到mq上
5. 创建消费者程序
public class consumer {
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory=new ConnectionFactory();
factory.setHost("192.168.***.***");
factory.setUsername("admin");
factory.setPassword("admin");
Connection connection=factory.newConnection();
Channel channel=connection.createChannel();
//成功以后的回调函数
DeliverCallback deliverCallback=(consumerTag,message)->{
System.out.println(new String(message.getBody()));
};
//失败或中断以后的回调函数
CancelCallback cancelCallback=(message)->{
System.out.println(message);
};
//1.获取消息的队列名称
//2.是否自动应答
//3.成功的回调函数
//4.失败的回调函数
channel.basicConsume(producer.QUEUE_NAME,true,deliverCallback,cancelCallback )
}
}
)
}