1.服务提供方发送消息,消费方接受消息,其中有一个ack机制:服务提供方发送消息之后,当消费方消费的时候,如果在这个过程中发生了异常,autoack为true的时候,消息照常被消费,但消费方并未完成消息处理,因此,我们需要将autoack设置为false,这样在处理消息的过程中如果发生异常,消息会进入待处理中,即unack,过程结束之后rabitmp消息会进行回滚,消息重新回到消息队列中,方法如下:
//消息处理中手动进行ack channel.basicAck(envelope.getdeliveryTag(),false)
//监听消息队列,第二个参数为fasle,手动进行ack
channel.basicConsume(QUEUE_NAME,fasle,consumer);
2.补充windows下安装的一些注意点:
安装没什么大问题,下载erlang.exe和rabbitmq.exe,双击一直下一步,erlang安装完之后系统会产生一个环境变量ERLANG_HOME:D:\java\erl10.2,rabbitmq的指令都需要再这个目录下运行D:\java\rabitmq\rabbitmq_server-3.7.9\sbin,目录栏输入cmd进入就可以输入命令了,有个需要注意的就是rabbitmq-service start需要用管理员身份开启cmd,再切到安装目录运行,显示--
请求的服务已经启动。
请键入 NET HELPMSG 2182 以获得更多的帮助。代表成功;
还有一些必要的指令:
启动监控管理器:rabbitmq-plugins enable rabbitmq_management
关闭监控管理器:rabbitmq-plugins disable rabbitmq_management
启动rabbitmq:rabbitmq-service start
关闭rabbitmq:rabbitmq-service stop
查看所有的队列:rabbitmqctl list_queues
清除所有的队列:rabbitmqctl reset
关闭应用:rabbitmqctl stop_app
启动应用:rabbitmqctl start_app
添加用户:rabbitmqctl add_user username password
分配角色:rabbitmqctl set_user_tags username administrator
分配的角色是没有访问权限的,no access,需要给角色分配权限,rabbitmqctl set_permissions -p / yunchao '.*' '.*' '.*'这个解决方法也是尝试了好几次
3.程序启动报错:reply-code=403, reply-text=ACCESS_REFUSED - access to queue 'test_work_queue' in vhost '/' refused for user '***', class-id=50, method-id=10
根据提示感觉应该是配置文件有问题,但是一直没改对,最后网上看到一个,直接在rabbitmq.config.example文件中修改配置--{tcp_listeners, [5672]},
{loopback_users, ["***"]},
重点申明::::不需要修改文件名...不需要修改文件名,我就吃了修改文件名的亏,我上了rabbitmq中readme的当
In this directory you can find an example configuration file for RabbitMQ.
Note that this directory is *not* where the real RabbitMQ
configuration lives. The default location for the real configuration
file is %APPDATA%\RabbitMQ\rabbitmq.config.
它说这个目录不是真的配置文件的位置...我最终是直接在rabbitmq.config.example文件中配置之后重启,OK