入门程序,hello world

  RabbitMQ是消息代理。从本质上说,它接受来自生产者的信息,并将它们传递给消费者。在两者之间,它可以根据你给它的路由,缓冲规则进行传递消息。

一、专业术语

1. 生产者:

在现实生活中就好比制造商品的工厂,他们是商品的生产者。生产者只意味着发送。发送消息的程序称之为一个生产者。我们用“P”表示:

2. 队列:

队列就像存放商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站。队列就像是一个仓库或者流水线。在RabbitMQ中,信息流从你的应用程序出发,来到RabbitMQ的队列,所有信息可以只存储在一个队列中。队列可以存储很多的消息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。多个生产者可以将消息发送到同一个队列中,多个消费者也可以只从同一个队列接收数据。这就是队列的特性。队列用下面的图表示,图上面是队列的名字:

3. 消费者

消费者就好比是从商店购买或从仓库取走商品的人,消费的意思就是接收。消费者是一个程序,主要是等待接收消息。我们的用“C”表示

注意:

生产者,消费者和队列(RabbitMQ)不必部署在同一台机器上。实际在生产环境的大多数应用中,他们都是分开部署的。

二、“Hello World”

1. 说明

在本教程中,我们我们通过2个java程序,一个发送消息的生产者,和一个接收信息并打印的消费者。想要了解rabbitmq,必须了解一些最基础的内容,我们先从一些代码片段来了解产生信息和接收消息的流程和方法。在编写代码前,我们先来用户一张图表示要做的事,在下图中,“P”是我们的生产者,“C”是我们的消费者。在中间红色框是代表RabbitMQ中的一个消息队列。箭头指向表示信息流的方向。

2.maven依赖

1 <dependency>
2             <groupId>com.rabbitmq</groupId>
3             <artifactId>amqp-client</artifactId>
4             <version>3.5.7</version>
5         </dependency>

3.  消息生产者

 1 package com.luchao.rabbitMQ.helloworld;
 2
 3 import com.rabbitmq.client.Channel;
 4 import com.rabbitmq.client.Connection;
 5 import com.rabbitmq.client.ConnectionFactory;
 6
 7 import java.io.IOException;
 8 import java.util.concurrent.TimeoutException;
 9
10 /**
11  * 生产者
12  * Created by andpay on 17/5/31.
13  */
14 public class Producer {
15
16     private static final String QUEUE_NAME = "hello";
17
18     public static void main(String[] args) throws IOException, TimeoutException {
19         //创建连接工厂
20         ConnectionFactory connectionFactory = new ConnectionFactory();
21         //设置RabbitMQ地址
22         connectionFactory.setHost("localhost");
23         //创建一个新的连接
24         Connection connection = connectionFactory.newConnection();
25         //创建一个频道
26         Channel channel = connection.createChannel();
27         //声明一个队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响
28         // 均与一次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。
29         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
30         String message = "Hello World!";
31         //发送消息到队列中
32         channel.basicPublish("", QUEUE_NAME, null, message.getBytes("utf-8"));
33         System.out.println("P [x] Sent ‘" + message + "‘");
34         //关闭频道、关闭连接
35         channel.close();
36         connection.close();
37     }
38 }

4. 消息消费者

 1 package com.luchao.rabbitMQ.helloworld;
 2
 3 import com.rabbitmq.client.*;
 4
 5 import java.io.IOException;
 6 import java.util.concurrent.TimeoutException;
 7
 8 /**
 9  * 消费者
10  * Created by andpay on 17/5/31.
11  */
12 public class Consumer {
13
14     private static final String QUEUE_NAME = "hello";
15
16     public static void main(String[] args) throws IOException, TimeoutException {
17         //创建连接工厂
18         ConnectionFactory connectionFactory = new ConnectionFactory();
19         //设置设置RabbitMQ地址
20         connectionFactory.setHost("localhost");
21         //创建一个新的连接
22         Connection connection = connectionFactory.newConnection();
23         //创建频道
24         Channel channel = connection.createChannel();
25         //声明要关注的队列 -- 在RabbitMQ中,队列声明是幂等性的(一个幂等操作的特点是其任意多次执行所产生的影响均与一
26         // 次执行的影响相同),也就是说,如果不存在,就创建,如果存在,不会对已经存在的队列产生任何影响。
27         channel.queueDeclare(QUEUE_NAME, false, false, false, null);
28         System.out.println("C [*] Waiting for messages. To exit press CTRL+C");
29         com.rabbitmq.client.Consumer consumer  = new DefaultConsumer(channel){
30             @Override
31             public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
32                 String message = new String(body, "utf-8");
33                 System.out.println("C [x] Received ‘" + message + "‘");
34             }
35         };
36         //自动回复队列应答 -- RabbitMQ中的消息确认机制
37         channel.basicConsume(QUEUE_NAME, true, consumer);
38     }
39 }

5. 运行测试

  启动rabbitMQ,运行生产者程序。运行结果。

C [*] Waiting for messages. To exit press CTRL+C  

  运行消费者程序,运行结果。

C [*] Waiting for messages. To exit press CTRL+C
C [x] Received ‘Hello World!‘ 

  打开rabbitMQ的web控制台看到:

 Connection

  channels

  exchanges

  以amp开头的是rabbitMQ自己的exchange,我们用的是默认的exchange,在代码中没有指定exchange。

  queues

  我们指定的queue为hello

				
时间: 2024-10-09 17:49:35

入门程序,hello world的相关文章

Mahout学习之Mahout简介、安装、配置、入门程序测试

一.Mahout简介 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的那个Mahout) 步入正文啦: Mahout 是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现.分类.聚类等.Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的

springmvc入门程序

springmvc的入门程序(和前面的mybatis使用同一个案例,商城的案例.订单,购物车等) 需求: 功能需求: 商品的列表查询 环境准备: Java环境: Jdk1.7 Myeclipes9 Springmvc版本:spring3.2 需要spring3.2所有jar,一定要包括spring-webmvc那个 开发步骤: 1.导入jar包,这个不解释了. 2.在web.xml中配置前端控制器: <servlet> <servlet-name>springmvc</ser

ant入门程序

一. ant简介 Ant是apache的一个核心项目, 它的作用是项目自动化构建, 因为它内置了Javac.Java.创建目录.复制文件等功能, 直接运行build.xml文件就可以编译我们的项目. 二. ant配置 1. 新建环境变量ANT_HOME: ant的解压目录 2. 在path中配置:%ANT_HOME%/bin; 3. 在命令行中输入ant, 如果出现 Buildfile:build.xml does not exist! Build failed 说明配置成功 三. ant入门程

python web入门程序

python2.x web入门程序 #!/usr/bin/python # -*- coding: UTF-8 -*- # 只在python2.x 有效 import os #Python的标准库中的os模块包含普遍的操作系统功能 import re #引入正则表达式对象 import urllib #用于对URL进行编解码 from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler #导入HTTP处理相关的模块 #自定义处理程序,

MyBatis 介绍、简单入门程序

JDBC 编程中的问题 1. 将 SQL 语句硬编码到 Java 代码.不利于系统维护. 设想怎样解决:将SQL单独抽取出来,在配置文件(xml方式.properties文件)进行配置. 2. 数据库连接不能反复利用,对数据库资源是一中浪费. 设想怎样解决:使用数据库连接池管理数据库连接. 3. 向 Statement 设置參数时,对于參数的位置通过硬编码指定,不利于系统维护. 设想怎样解决:是否可以自己主动将 Java 对象的值设置到 Statement. 4. 遍历结果集.resultSet

struts2入门程序

1.搭建struts2环境开发的步骤 搭建struts2环境时,我们一般需要做一下几个步骤的工作: 1.  创建javaweb工程 2.  找到开发struts应用所需要使用的jar 3.  创建jsp文件 4.  创建action文件 5.  编写struts2的配置文件 6.  在web.xml中加入struts2 MVC框架启动配置 开发struts2中需要使用的基本jar包: 关于struts2的提示: 我的myeclipes默认的struts2提示只到2.1,如果需要有2.3的提示,有

.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序

原文:.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序 我不知道人们为什么那么喜欢用HelloWorld来做为自己的第一个程序入门,为什么不是hello **其他的东西或者hi. 一.打开ADT 的Eclipse开发工具新建一个Android项目 New----> Android Application Project Minimum Required SDK这个是运行hello world的最低android版本 Target SDK是现在的目标版本 Co

mybatis入门_mybatis基本原理以及入门程序

一.传统jdbc存在的问题 1.创建数据库的连接存在大量的硬编码, 2.执行statement时存在硬编码. 3.频繁的开启和关闭数据库连接,会严重影响数据库的性能,浪费数据库的资源. 4.存在大量的重复性编码 二.mybatis执行流程 Mybatis基本的执行流程如下图所示: 三.mybatis入门程序 3.1 通过mybatis完成通过主键(id)查询用户(user) 3.1.1.项目环境搭建 建立的是Java项目.采用的mybatis版本为3.2.7. 需要导入mybatis核心jar包

springMVC2 1入门程序

1入门程序 1.1需求 实现商品列表查询 1.2需要的jar包 使用spring3.2.0(带springwebmvc模块) 1.1前端控制器 在web.xml中配置: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.c

cocos2d-x 3.0的入门程序:helloworld

看过了这么多不同方向的应用,发现很多程序入门都是helloworldhelloworld是所有程序员的绝对初恋 先看一下程序的运行结果吧 然后就是他的工程代码 工程的目录有两个 Classes:程序中的类 AppDelegate.h/cpp:Cocos2d-x程序框架          AppMacros.h:所用到的宏,主要是设置分辩率及对应的资源目录                   HelloWorldScene.h/cpp:场景显示层 win32:WIN32程序所涉及的主函数 main