redis实现MQ

本文介绍了Linux环境下常见服务如Redis、Nginx等的启动与关闭方法,并详细阐述了消息队列(MQ)的配置过程及其实现,包括如何通过Spring框架进行配置。

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

  • Linux的命令总结:
    • 连接redis不成功可能是防火墙:(当然在公司不可能采用如此极端的方式)systemctl stop firewalld.service
- 查看所有一个应用的pid: ps -ef |grep ngix
- 开启nginx:在nginx 的文件夹下进入到nginx 的sbin的目录下,开启nginx: ./nginx -t
- 关闭nginx:查找进程号 pid 并且用pid kill -9 pid
- 开启redis(相当于缓存存储数据):redis-server /etc/redis/redis.conf
- 关闭redis : kill -9 进程号 pid
- 开启tomcat:进入到usr/local/tomcat/bin/start.h ---> ./start.h
- 开启tomcat的日志文件:usr/local/tomcat/logs/-----> tail -f catalina.out
- zookeeper的开启方式:进入到usr/local/zookeeper/bin  ----> ./zkServer.sh start
- 检验是否开启成功: netstat -ano|grep 2181 (任何应用的端口都可以查出来)
  • 关于MQ的整理的内容:
    image
  • 消息队列(Mq):
  • 其实就是在原本的业务上附加一个与主业不相关的业务,而这个业务仅仅就是一个附属品而已,他的实现与否对这个主业务并不能造成影响
    -配置Spring-ioc。xml的配置文件:(这个bean的id一定redisConnectionFactory)不可以更改只要使用到了mq的id
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!-- redis 配置 -->
<!-- 配置redis的连接工厂 -->
<bean id="redisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:host-name="10.0.152.229" p:port="6379">
<!-- <property name="hostName" value="10.0.152.204"></property> -->
<!-- <property name="post" value="6379"></property> -->
</bean>

<!-- 操作redis的封装类 -->
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate"
p:connection-factory-ref="redisConnectionFactory">
<!-- <property name="connectionFactory" ref="jedisConnectionFactory"></property> -->
<!--配置两个序列化的工具,一个key,一个是value -->
</bean>
  • 配置的listener的监听器 给这个队列起一个名字中的处理的方法:

    1
    2
    3
    4
    5
    6
    7
    <!--配置监听者的容器
    ref:指定的监听这的实例
    method属性: 指定这个类中的哪一个方法接消息
    -->
    <redis:listener-container>
    <redis:listener ref="listener" method="handleMessage" serializer="jdkSer" topic="my_queue"/>
    </redis:listener-container>
  • 创建的实体类实现序列化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package springdata;

import java.io.Serializable;

public class MessageModel implements Serializable{
private String message;
private String puUser;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getPuUser() {
return puUser;
}
public void setPuUser(String puUser) {
this.puUser = puUser;
}
@Override
public String toString() {
return "MessageModel [message=" + message + ", puUser=" + puUser + "]";
}


}
  • 发送消息的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package springdata;

import java.io.Serializable;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

/**
* 消息的发送者
* @author Administrator
*
*/
@Component
public class SendMessage {

@Autowired
private StringRedisTemplate redisTemplate;
/**
* 发送消息的方法
* message 要发送的消息
* channel 队列的名字
*/

public void sendMessage(String channel,Serializable message){

redisTemplate.convertAndSend(channel, message);
}
}
  • 接收消息:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package springdata;

import java.io.Serializable;

import org.springframework.stereotype.Component;

/**
* 消息的接收者
* @author Administrator
* 削峰
*
*/
@Component
public class Listener {
/**
* 创建监听的方法,接收消息并且处理
* 方法的名字,没有具体的要求
* sdr 会默认调用监听的handleMessage方法
*/
public void handleMessage(Serializable message){
if (message instanceof MessageModel) {
{
MessageModel messageModel= (MessageModel) message;
//逻辑可以在这实现
System.out.println(message);
}

}
}

}
  • 一上的功能就使用StringRedisTemplate 的convertAndSend(指定队列名和message)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值