赞
踩
目录
五种消息模型
RabbitMQ提供了7种消息模型。其中3、4、5这三种都属于订阅模型,只不过进行路由的方式不同。67这里暂时不表。
总结:直连模式1v1,work模式抢红包,广播模式公众号,路由模式小团体,Topic模式土豪版小团体
直连模型
P(producer/ publisher):生产者,发送消息到消息队列
C(consumer):消费者从消息队列中取出消息进行消费
Queue:消息队列,图中红色部分。类似一个邮箱,可以缓存消息;生产者向其中投递消息,消费者从其中取出消息。
总之:生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区。注意,当消费者从队列中消费消息后,这条消息是否还存在队列中,以及这个队列是否存在,都需要你自定义进行设置,在“持久化”这一节里面有讲。
producer
新建一个ems用户,新建一个/ems虚拟主机,让ems用户与ems虚拟主机进行绑定
新建一个maven父子项目,父项目空即可,子项目中导入rabbitmq和junit依赖
- <dependency>
- <groupId>com.rabbitmq</groupId>
- <artifactId>amqp-client</artifactId>
- <version>5.7.2</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- </dependency>
我们先新建一个工具类,用来创建连接对象,这里用到了单例模式!
-
- public class RabbitMQUtils {
- private static ConnectionFactory connectionFactory;
-
- static {
- connectionFactory = new ConnectionFactory();
- //我们把重量级资源通过单例模式加载
- connectionFactory.setHost("192.168.62.130");
- connectionFactory.setPort(5672);
- connectionFactory.setUsername("ems");
- connectionFactory.setPassword("ems");
- connectionFactory.setVirtualHost("/ems");
- }
-
- //定义提供连接对象的方法
- public static Connection getConnection(){
- try{
- return connectionFactory.newConnection();
- }catch (Exception e){
- e.printStackTrace();
- }
- return null;
- }
-
- //定义关闭通道和关闭连接工具方法
- public static void closeConnectionAndChanel(Channel channel, Connection conn){
- try {
- if(channel!=null) {
- channel.close();
- }
- if(conn!=null) {
- conn.close();
- }
- }catch (Exception e){
- e.printStackTrace();
- }
- }
- }
在HelloWorld(模式一官方命名就叫helloworld)包下新建Producer.java
- public class Provider {
- //生产消息
- @Test
- public void testSendMessage() throws IOException, TimeoutException{
- //通过工具类获取连接
- Connection connection = RabbitMQUtils.getConnection();
- //创建通道
- Channel channel = connection.createChannel();
- //参数1:是否持久化,参数2:是否独占队列 参数3:是否自动删除 参数4:其他属性
- channel.queueDeclar
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。