消息队列rabbitmq安装及php扩展安装

本文详细介绍了RabbitMQ的安装步骤,包括通过yum源安装RabbitMQ及其相关组件,如rabbitmq-c和PHP扩展,并提供了开启Web管理界面的方法。此外,还深入探讨了RabbitMQ的基本概念和消息发送、接收机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上的方法很多,但我自己装的时候总会报一个奇怪的错

collect2: ld returned 1 exit status 
make: *** [amqp.la] Error 1 rabbitmq

安装rabbitmq有三步
第一步安装rabbitmq
这里我用的是yum源安装,当然也可以自行编译,找到相关的依赖,一个一个下,但是保不奇会遇到一些蛇皮错误。

yum install rabbitmq-server

第二步安装rabbitmq-c
yum 源安装的rabbitmq-server版本不高,当时我安的是最新版,可以是这个原因报错

 nohup rabbitmq-server >/dev/null 2>/dev/null &
wget https://github.com/alanxz/rabbitmq-c/releases/download/v2.0/rabbitmq-c-0.5.2.tar.gz
tar zxvf rabbitmq-c-0.5.2.tar.gz
cd rabbitmq-c-0.5.2
./configure --prefix=/usr/local/rabbitmq-c
make && make install

第三步安装php扩展so文件
pecl install amqp
第四步
vim php.ini
添加以下语句
extension=amqp.so
搞定
你也可以去下载相应的amqp的c扩展源码包进行安装,也许可以成功,但是我就是编译不成功,只能用pecl来安装
还可以启用web管理插件

cd /usr/lib/rabbitmq/bin
./rabbitmq-plugins enable rabbitmq_management 

默认是在15672端口有一个web管理界面。
返正阿里云跟腾迅云就是边不上15672端口,所有我要修改,web管理界面的端口
修改配配置文件

vim /etc/rabbitmq/rabbitmq.config

添加以下

 {rabbitmq_management,
  [%% Pre-Load schema definitions from the following JSON file. See
   %% http://www.rabbitmq.com/management.html#load-definitions
   %%
   %% {load_definitions, "/path/to/schema.json"},

   %% Log all requests to the management HTTP API to a file.
   %%
   %% {http_log_dir, "/path/to/access.log"},

   %% Change the port on which the HTTP listener listens,
   %% specifying an interface for the web server to bind to.
   %% Also set the listener to use SSL and provide SSL options.
   %%
   %% {listener, [{port,     12345},
   %%             {ip,       "127.0.0.1"},
   %%             {ssl,      true},
   %%             {ssl_opts, [{cacertfile, "/path/to/cacert.pem"},
   %%                         {certfile,   "/path/to/cert.pem"},
   %%                         {keyfile,    "/path/to/key.pem"}]}]},

   %% Configure how long aggregated data (such as message rates and queue
   %% lengths) is retained. Please read the plugin's documentation in
   %% https://www.rabbitmq.com/management.html#configuration for more
   %% details.
   %%
   %% {sample_retention_policies,
   %%  [{global,   [{60, 5}, {3600, 60}, {86400, 1200}]},
   %%   {basic,    [{60, 5}, {3600, 60}]},
   %%   {detailed, [{10, 5}]}]}
   {listener, [{port,     8080},
             {ip,       "0.0.0.0"},
             {ssl,     false}
]}
  ]},

改为80端口,一串注释不用理他,只要管{listen就行了,开8080端口就行
用php -m查看一下

关于windows的安装
首先要安装erlang22和rabbitmq3.8
er跟ra版本要对应上
再把erlang的安装目录,弄一个EARLANG_HOME的用户变量和系统变量
再把bin目录放到时path变量中

rabbitmq-plugins enable rabbitmq_management
rabbitmq-server.bat start

二、关于rabbitmq发送消息的一些基本概念
发送消息是通过Exchange的rouute key的不同,来发送的指定的消息给指定的队列queue的。
而Exchange本身有三种常见匹配规则来匹配到指定的queue。
这三种常见的匹配规则分别是

1。direct 
2。fanout
3。topic

如图所示
在这里插入图片描述

1。direct (单播)
这种匹配规则是全匹配路由键的。也就是routingkey要完全相等,才能匹配到指定的队列。
在这里插入图片描述
2。fanout(广播)
这种匹配规则是匹配所有的routingkey,也就是发给所有队列。
在这里插入图片描述

3.topic
这种匹配规则是带正则的
在这里插入图片描述

代码例 子
配置

        <!--    rabbitmq    -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        yml
          rabbitmq:
    host: 127.0.0.1
    username: guest
    password: guest

主applicatit要启用注解

@SpringBootApplication
@EnableRabbit
public class VuelogApplication {

    public static void main(String[] args) {
        SpringApplication.run(VuelogApplication.class, args);
    }

}

一、发送

 @Autowired
    RabbitTemplate rabbitTemplate;
    @PostMapping("/test")
    public void test(HttpServletRequest httpServletRequest){
        System.out.println(httpServletRequest.getParameter("test"));
        Map<String,Object> map=new HashMap<>();
        map.put("msg","这是第一个消息");
        map.put("data", Arrays.asList("hellowo",123,true));
        rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);//单播
        rabbitTemplate.convertAndSend("exchange.fanout","",map);//广播
    }

二、接收

@Service
public class BookService {

    @RabbitListener(queues = "atguigu.news")
    public void receive(Object object){
        System.out.println("receive"+object);
    }

    @RabbitListener(queues = "atguigu")
    public void receive02(Message message){
        System.out.println(message.getBody());
        System.out.println(message.getMessageProperties());
    }
}

三、管理

  @Test
        public void createExchange(){
            amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
            System.out.println("创建exchange完成");
            amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
            System.out.println("queue完成");
            //绑定时,要确保exchange和queue己经创建完成
            amqpAdmin.declareBinding(new Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqpadmin.haha",null));
            System.out.println("绑定完成");
        }

概念:
exchange交换器里面绑了多个队列,生产者发送消息时要指定交换器和路由键,交换器收到路由键由自身规则类型匹配到自身指定的队列里进行存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值