模板网站是否便于搜索引擎优化?网页设计公司如何助力?
摘要:模板网站好优化吗,网站设计网页设计公司,医疗网站建设流程,网站为什么有价值是一、pom依赖二、消费端2.1、application.properties 配置文件2.2、消费端核心组件 三、生产端3.1、application.proper
模板网站好优化吗,网站设计网页设计公司,医疗网站建设流程,网站为什么有价值是一、pom依赖二、消费端2.1、application.properties 配置文件2.2、消费端核心组件 三、生产端3.1、application.properties 配置文件2.2、生产者 MQ消息发送组件四、测试1、生产端控制台2、消费端控制台 一、pom依赖 dependencygroupIdorg.springframework.boo… 一、pom依赖二、消费端2.1、application.properties 配置文件2.2、消费端核心组件 三、生产端3.1、application.properties 配置文件2.2、生产者 MQ消息发送组件四、测试1、生产端控制台2、消费端控制台 一、pom依赖 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!--spring整合MQ--dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-amqp/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactId/dependency二、消费端
2.1、application.properties 配置文件
server.port8002
#上下文路径
server.servlet.context-path/
spring.application.namerabbit_consumer# MQ配置
spring.rabbitmq.addresses192.168.220.3:5672
spring.rabbitmq.usernameroot
spring.rabbitmq.passwordroot
# 虚拟主机
spring.rabbitmq.virtual-host/
# 连接超时 15秒
spring.rabbitmq.connection-timeout15000
# 设置消费端消费成功消息后手动签收消息默认auto自动签收
spring.rabbitmq.listener.simple.acknowledge-modemanual
spring.rabbitmq.listener.simple.concurrency6
# 最大消费线程数并发数
spring.rabbitmq.listener.simple.max-concurrency11
# prefetch为限制一次传送给消费者的消息数
spring.rabbitmq.listener.simple.prefetch1# 自定义属性配置 MQ
spring.rabbitmq.listener.test.exchangetest_topic_exchange
spring.rabbitmq.listener.test.exchange.typetopic
spring.rabbitmq.listener.test.queuetest_topic1
spring.rabbitmq.listener.test.keytest_topic1.*2.2、消费端核心组件
package com.xiao.component;import com.rabbitmq.client.Channel;
import org.springframework.amqp.rabbit.annotation.*;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import java.io.IOException;Component
public class RabbitMQReceived {RabbitListener(bindings QueueBinding(exchange Exchange(name ${spring.rabbitmq.listener.test.exchange},type ${spring.rabbitmq.listener.test.exchange.type},durable true,ignoreDeclarationExceptions true),value Queue(value ${spring.rabbitmq.listener.test.queue},durable true),key ${spring.rabbitmq.listener.test.key}/*,admins root*/))/*** 监听消息* param message 消息* param channel 通道*/RabbitHandlerpublic void onMessage(Message message, Channel channel) throws IOException {System.err.println();System.err.println(消费端 RabbitMQReceived 消费消息 message.getPayload());Long deliveryTag (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);//由于消费端配置手动消费消息后签收机制 spring.rabbitmq.listener.simple.acknowledge-modemanual
// channel.basicAck(deliveryTag,false);System.err.println(消费端 RabbitMQReceived ackyes deliveryTag: deliveryTag);}
}三、生产端
3.1、application.properties 配置文件
server.port8001
#上下文路径
server.servlet.context-path/
spring.application.namerabbit_produce# MQ配置
spring.rabbitmq.addresses192.168.220.3:5672
spring.rabbitmq.port5672
spring.rabbitmq.usernameroot
spring.rabbitmq.passwordroot
# 虚拟主机
spring.rabbitmq.virtual-host/
# 连接超时 15秒
spring.rabbitmq.connection-timeout15000
# 开启produce发送给broker的消息确认模式可靠性投递
spring.rabbitmq.publisher-confirmstrue
#spring.rabbitmq.publisher-confirm-typetrue #有点问题
# 针对于broker未接收的消息return机制需要结合mandatory一起使用
#spring.rabbitmq.template.mandatorytrue
#spring.rabbitmq.publisher-returnstrue2.2、生产者 MQ消息发送组件
package com.xiao.component;import org.springframework.amqp.AmqpException;
import org.springframework.amqp.core.Correlation;
import org.springframework.amqp.core.MessagePostProcessor;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Component;
import java.util.Map;
import java.util.UUID;Component
public class RabbitMQSender {Autowiredprivate RabbitTemplate rabbitTemplate;//生产者发送消息到broker确认回调接口private final RabbitTemplate.ConfirmCallback confirmCallback new RabbitTemplate.ConfirmCallback() {/*** param correlationData 消息的唯一标识* param ack broke broker是否签收成功* param cause 失败异常信息*/Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {String formatStr String.format(生产端 confirmCallback 相关数据%s broker签收情况 ack%s异常信息%s ,correlationData.toString(),ack,cause);System.err.println(formatStr);/*System.out.println(生产端 confirmCallback 相关数据 correlationData);System.out.println(生产端 confirmCallback broker签收情况 ack);System.out.println(生产端 confirmCallback 异常信息 cause);*/}};/*** 发送消息* param message 消息* param properties 消息对应的属性如时间*/public void send(Object message, MapString,Object properties) {MessageHeaders messageHeaders new MessageHeaders(properties);Message? msg MessageBuilder.createMessage(message, messageHeaders);rabbitTemplate.setConfirmCallback(confirmCallback);//消息发送完后置处理器MessagePostProcessor messagePostProcessor new MessagePostProcessor() {Overridepublic org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message) throws AmqpException {System.err.println(生产端 RabbitMQSender send后置处理 message);return message;}Overridepublic org.springframework.amqp.core.Message postProcessMessage(org.springframework.amqp.core.Message message, Correlation correlation) {System.err.println(生产端 RabbitMQSender send后置处理 message 消息标识 correlation);return message;}};//消息唯一属性CorrelationData correlationData new CorrelationData(UUID.randomUUID().toString());rabbitTemplate.convertAndSend(test_topic_exchange,//exchange,test_topic1.xiao,// routingKey,msg, //message,messagePostProcessor,correlationData);}
}四、测试
package com.xiao;import com.xiao.component.RabbitMQSender;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.HashMap;
import java.util.Map;RunWith(SpringJUnit4ClassRunner.class)
SpringBootTest
public class SendMessageTest {Autowiredprivate RabbitMQSender rabbitMQSender;Testpublic void send() throws InterruptedException {MapString,Object properties new HashMap(2);properties.put(userName,xiao);rabbitMQSender.send(hello world!,properties);Thread.sleep(5000);//10秒}
}1、生产端控制台
生产端 RabbitMQSender send后置处理(Body:[B3a6045c6(byte[535]) MessageProperties [headers{}, contentTypeapplication/x-java-serialized-object, contentLength535, deliveryModePERSISTENT, priority0, deliveryTag0]) 消息标识CorrelationData [id8c78e89d-80f3-4f3d-ba8b-13e863c6295c]
2023-07-21 20:05:37.611 INFO 4536 --- [ main] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [192.168.220.3:5672]
2023-07-21 20:05:37.653 INFO 4536 --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#6f38a289:0/SimpleConnection6215366a [delegateamqp://root192.168.220.3:5672/, localPort 4712]
生产端 confirmCallback 相关数据CorrelationData [id8c78e89d-80f3-4f3d-ba8b-13e863c6295c]broker签收情况 acktrue异常信息null2、消费端控制台 消费端 RabbitMQReceived 消费消息hello world!
消费端 RabbitMQReceived ackyes deliveryTag:1
