10 rabbitmq的安装与集成
1 安装rabitmq
sudo apt install xmlto -y
sudo apt install python-simplejson -y
sudo apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y- 2 测试
cd /usr/local/rabbitmq/sbin
启动、停止、重启、状态rabbitMq命令
sudo rabbitmq-server start
sudo rabbitmq-server stop
sudo rabbitmq-server restart
sudo rabbitmqctl status
netstat -nap | grep 5672
- 3 开放端口
# 查看端口开启情况
netstat -nltp | grep 3306
# 开启端口
sudo iptables -I INPUT -p tcp --dport 5672 -j ACCEPT
sudo netfilter-persistent save
sudo netfilter-persistent reload
# windows 上测试
telnet 10.23.23.25 56723 spring boot 继承RabbitMQ
- 1 添加依赖
org.springframework.boot
spring-boot-starter-amqp
- 2 添加配置:
spring.rabbitmq.host=10.23.23.25
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
spring.rabbitmq.virtual-host=/
#消费者数量
spring.rabbitmq.listener.simple.concurrency= 10
spring.rabbitmq.listener.simple.max-concurrency= 10
#消费者每次从队列获取的消息数量
spring.rabbitmq.listener.simple.prefetch= 1
#消费者自动启动
spring.rabbitmq.listener.simple.auto-startup=true
#消费失败,自动重新入队
spring.rabbitmq.listener.simple.default-requeue-rejected= true
#启用发送重试
spring.rabbitmq.template.retry.enabled=true
spring.rabbitmq.template.retry.initial-interval=1000
spring.rabbitmq.template.retry.max-attempts=3
spring.rabbitmq.template.retry.max-interval=10000
spring.rabbitmq.template.retry.multiplier=1.01、Direct 模式
- 3 MQConfig
@Configurationpublic class MQConfig {
public static final String QUEUE = "queue"; @Bean public Queue queue(){
return new Queue(QUEUE, true); }
}- 4 MQSender
@Servicepublic class MQSender {
@Autowired AmqpTemplate amqpTemplate; @Autowired RedisService redisService; private static Logger log = LoggerFactory.getLogger(MQSender.class); public void send(Object message){
String msg = redisService.beanToString(message); log.info("sender msg: " + msg); amqpTemplate.convertAndSend(MQConfig.QUEUE, message); }
}- 5 MQReceiver
/** * Direct 模式 交换机Exchange * @param message */
@Servicepublic class MQReceiver {
private static Logger log = LoggerFactory.getLogger(MQReceiver.class); @RabbitListener(queues = MQConfig.QUEUE)
public void receive(String message){
log.info("receive mesage: " + message); }
}- 6 函数入口
@AutowiredMQSender mqSender;@AutowiredMQReceiver mqReceiver;public Result<String> mq(){
mqSender.send("weidalin, hello"); return Result.success("Hello, world");}2、 topic 模式
- 1 config
@Beanpublic Queue topicQueue2(){ return new Queue(TOPIC_QUEUE2, true);}@Beanpublic TopicExchange topicExchange(){
return new TopicExchange(TOPIC_EXCHAGE);}@Beanpublic Binding topicBinding1(){
return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with(ROUTING_KEY1);}
@Beanpublic Binding topicBinding2(){
return BindingBuilder.bind(topicQueue1()).to(topicExchange()).with(ROUTING_KEY2);}
- 2 sender
public void sendTopic(Object message){
String msg = redisService.beanToString(message); log.info("sender topic msg: " + msg); amqpTemplate.convertAndSend(MQConfig.TOPIC_EXCHAGE, "topic.key1", msg + "1"); amqpTemplate.convertAndSend(MQConfig.TOPIC_EXCHAGE, "topic.key2", msg + "2");}- 3 recieve
/** * Topic 模式 交换机Exchange * @param message */@RabbitListener(queues = MQConfig.TOPIC_QUEUE1) public void receiveTopic1(String message){ log.info("topic queue1 receive mesage: " + message);}
@RabbitListener(queues = MQConfig.TOPIC_QUEUE2)
public void receiveTopic2(String message){
log.info("topic queue2 receive mesage: " + message);}
3 Fanout 模式
- 1 confing
/** * Fanout 模式, */@Beanpublic FanoutExchange fanoutExchange(){ return new FanoutExchange(FANOUT_EXCHANGE);} @Beanpublic Binding FanoutBinding1(){ return BindingBuilder.bind(topicQueue1()).to(fanoutExchange());}
@Beanpublic Binding FanoutBinding2(){
return BindingBuilder.bind(topicQueue2()).to(fanoutExchange());}
- 2 sender
public void sendFanout(Object message){
String msg = redisService.beanToString(message); log.info("sender fanout msg: " + msg); amqpTemplate.convertAndSend(MQConfig.FANOUT_EXCHANGE, msg + "fantout");}- 3 recieve
不需要改,直接用 Direct 模式的就行
4 headers 模式
- 1 config
/** * Header 模式 */@Beanpublic HeadersExchange headersExchange(){
return new HeadersExchange(HEADERS_EXCHANGE);}
@Beanpublic Queue headersQueue1(){
return new Queue(HEADERS_QUEUE, true);}
@Beanpublic Binding headersBinding2(){
Map<String, Object> map = new HashMap<String, Object>(); map.put("header1", "value1"); map.put("header2", "value2"); return BindingBuilder.bind(headersQueue1()).to(headersExchange())
.whereAll(map).match();}- 2 sender
public void sendHeaders(Object message){
String msg = redisService.beanToString(message); log.info("sender headers msg: " + msg); MessageProperties properties = new MessageProperties(); properties.setHeader("header1", "value1"); properties.setHeader("header2", "value2"); Message obj = new Message(msg.getBytes(), properties); amqpTemplate.convertAndSend(MQConfig.HEADERS_EXCHANGE, "", obj);}- 3 recieve
@RabbitListener(queues = MQConfig.HEADERS_QUEUE)
public void receiveTopic2(byte[] message){
log.info("header queue2 receive mesage: " + new String(message));}- 7 为了让guest用户能远程连接,修改rabbitmq的配置/usr/local/rabbitmq/etc/rabbitmq/rabbitmq.config
cd /usr/local/rabbitmq cd etc cd rabbitmq vi rabitmq.config# 填入[{rabbit, [{loopback_users, []}]}].
启用管理控制台
./sbin/rabbitmq-plugins enable rabbitmq_management
重启rabbitmq。
cd ../sbin
./rabbitmqctl stop
./rabbitmq-server
ps -ef | grep rabbit
要卸载好多东西,有点吓人
tm 的直接gg了

解决:
cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get install -f
sudo apt-get upgrade- 问题: vi: error while loading shared libraries: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory
# 解决
cp /usr/local/python3.6.3/lib/libpython3.6m.so.1.0 /usr/lib64/
@Beanpublic Queue miaosha_queue() {
return new Queue(MIAOSHA_QUEUE, true);}

浙公网安备 33010602011771号