欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

怎么在SpringBoot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)怎么在Spring Boot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),陽(yáng)西企業(yè)網(wǎng)站建設(shè),陽(yáng)西品牌網(wǎng)站建設(shè),網(wǎng)站定制,陽(yáng)西網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,陽(yáng)西網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

activemq.bat啟動(dòng):

wrapper | --> Wrapper Started as Console
wrapper | Launching a JVM...
jvm 1 | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1 | Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.
jvm 1 |
jvm 1 | Java Runtime: Oracle Corporation 1.8.0_181 C:\Program Files\Java\jre1.8.0_181
jvm 1 | Heap sizes: current=125952k free=115299k max=932352k
jvm 1 | JVM args: -Dactivemq.home=../.. -Dactivemq.base=../.. -Djavax.net.ssl.keyStorePassword=password -Djavax.net.ssl.trustStorePassword=password -Djavax.net.ssl.keyStore=../../conf/broker.ks -Djavax.net.ssl.trustStore=../../conf/broker.ts -Dcom.sun.management.jmxremote -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dactivemq.conf=../../conf -Dactivemq.data=../../data -Djava.security.auth.login.config=../../conf/login.config -Xmx1024m -Djava.library.path=../../bin/win64 -Dwrapper.key=mChNCWMZ2FoXhZ9g -Dwrapper.port=32000 -Dwrapper.jvm.port.min=31000 -Dwrapper.jvm.port.max=31999 -Dwrapper.pid=3500 -Dwrapper.version=3.2.3 -Dwrapper.native_library=wrapper -Dwrapper.cpu.timeout=10 -Dwrapper.jvmid=1
jvm 1 | Extensions classpath:
jvm 1 | [..\..\lib,..\..\lib\camel,..\..\lib\optional,..\..\lib\web,..\..\lib\extra]
jvm 1 | ACTIVEMQ_HOME: ..\..
jvm 1 | ACTIVEMQ_BASE: ..\..
jvm 1 | ACTIVEMQ_CONF: ..\..\conf
jvm 1 | ACTIVEMQ_DATA: ..\..\data
jvm 1 | Loading message broker from: xbean:activemq.xml
jvm 1 | INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@f0ef68d: startup date [Fri May 24 15:16:21 CST 2019]; root of context hierarchy
jvm 1 | INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[D:\Dev\apache-activemq-5.15.9\bin\win64\..\..\data\kahadb]
jvm 1 | INFO | PListStore:[D:\Dev\apache-activemq-5.15.9\bin\win64\..\..\data\localhost\tmp_storage] started
jvm 1 | INFO | Apache ActiveMQ 5.15.9 (localhost, ID:wulf00-51057-1558682182909-0:1) is starting
jvm 1 | INFO | Listening for connections at: tcp://wulf00:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600
jvm 1 | INFO | Connector openwire started
jvm 1 | INFO | Listening for connections at: amqp://wulf00:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600
jvm 1 | INFO | Connector amqp started
jvm 1 | INFO | Listening for connections at: stomp://wulf00:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600
jvm 1 | INFO | Connector stomp started
jvm 1 | INFO | Listening for connections at: mqtt://wulf00:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600
jvm 1 | INFO | Connector mqtt started
jvm 1 | INFO | Starting Jetty server
jvm 1 | INFO | Creating Jetty connector
jvm 1 | WARN | ServletContext@o.e.j.s.ServletContextHandler@17bc7c8a{/,null,STARTING} has uncovered http methods for path: /
jvm 1 | INFO | Listening for connections at ws://wulf00:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600
jvm 1 | INFO | Connector ws started
jvm 1 | INFO | Apache ActiveMQ 5.15.9 (localhost, ID:wulf00-51057-1558682182909-0:1) started
jvm 1 | INFO | For help or more information please see: http://activemq.apache.org
jvm 1 | WARN | Store limit is 102400 mb (current store usage is 0 mb). The data directory: D:\Dev\apache-activemq-5.15.9\bin\win64\..\..\data\kahadb only has 92649 mb of usable space. - resetting to maximum available disk space: 92649 mb
jvm 1 | INFO | No Spring WebApplicationInitializer types detected on classpath
jvm 1 | INFO | ActiveMQ WebConsole available at http://0.0.0.0:8161/
jvm 1 | INFO | ActiveMQ Jolokia REST API available at http://0.0.0.0:8161/api/jolokia/
jvm 1 | INFO | Initializing Spring FrameworkServlet 'dispatcher'
jvm 1 | INFO | No Spring WebApplicationInitializer types detected on classpath
jvm 1 | INFO | jolokia-agent: Using policy access restrictor classpath:/jolokia-access.xml

默認(rèn)端口8161,訪問(wèn)下http://localhost:8161/admin,用戶名密碼都是admin,進(jìn)入控制臺(tái)頁(yè)面:

怎么在Spring Boot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息

我們用坐上方的Queues來(lái)創(chuàng)建一個(gè)叫vboxlog的隊(duì)列:

怎么在Spring Boot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息 

二、修改activeMQ配置文件

broker新增配置信息 schedulerSupport="true"

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true" >

 <destinationPolicy>
 <policyMap>
 <policyEntries>
 <policyEntry topic=">" >
 <!-- The constantPendingMessageLimitStrategy is used to prevent
 slow topic consumers to block producers and affect other consumers
 by limiting the number of messages that are retained
 For more information, see:

 http://activemq.apache.org/slow-consumer-handling.html

 -->
 <pendingMessageLimitStrategy>
 <constantPendingMessageLimitStrategy limit="1000"/>
 </pendingMessageLimitStrategy>
 </policyEntry>
 </policyEntries>
 </policyMap>
 </destinationPolicy>

三、創(chuàng)建SpringBoot工程

1、配置ActiveMQ工廠信息,信任包必須配置否則會(huì)報(bào)錯(cuò)

package com.example.demoactivemq.config;

import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.RedeliveryPolicy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

/**
 * @author shanks on 2019-11-12
 */
@Configuration
public class ActiveMqConfig {

 @Bean
 public ActiveMQConnectionFactory factory(@Value("${spring.activemq.broker-url}") String url){
 ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(url);
 // 設(shè)置信任序列化包集合
 List<String> models = new ArrayList<>();
 models.add("com.example.demoactivemq.domain");
 factory.setTrustedPackages(models);

 return factory;
 }

}

消息實(shí)體類

package com.example.demoactivemq.domain;

import lombok.Builder;
import lombok.Data;

import java.io.Serializable;

/**
 * @author shanks on 2019-11-12
 */

@Builder
@Data
public class MessageModel implements Serializable {
 private String titile;
 private String message;
}

生產(chǎn)者

package com.example.demoactivemq.producer;


import lombok.extern.slf4j.Slf4j;
import org.apache.activemq.ScheduledMessage;
import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jms.JmsProperties;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.jms.*;
import java.io.Serializable;


/**
 * 消息生產(chǎn)者
 *
 * @author shanks
 */
@Service
@Slf4j
public class Producer {

 public static final Destination DEFAULT_QUEUE = new ActiveMQQueue("delay.queue");

 @Autowired
 private JmsMessagingTemplate template;

 /**
 * 發(fā)送消息
 *
 * @param destination destination是發(fā)送到的隊(duì)列
 * @param message message是待發(fā)送的消息
 */
 public <T extends Serializable> void send(Destination destination, T message) {
 template.convertAndSend(destination, message);
 }

 /**
 * 延時(shí)發(fā)送
 *
 * @param destination 發(fā)送的隊(duì)列
 * @param data 發(fā)送的消息
 * @param time 延遲時(shí)間
 */
 public <T extends Serializable> void delaySend(Destination destination, T data, Long time) {
 Connection connection = null;
 Session session = null;
 MessageProducer producer = null;
 // 獲取連接工廠
 ConnectionFactory connectionFactory = template.getConnectionFactory();
 try {
 // 獲取連接
 connection = connectionFactory.createConnection();
 connection.start();
 // 獲取session,true開(kāi)啟事務(wù),false關(guān)閉事務(wù)
 session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
 // 創(chuàng)建一個(gè)消息隊(duì)列
 producer = session.createProducer(destination);
 producer.setDeliveryMode(JmsProperties.DeliveryMode.PERSISTENT.getValue());
 ObjectMessage message = session.createObjectMessage(data);
 //設(shè)置延遲時(shí)間
 message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, time);
 // 發(fā)送消息
 producer.send(message);
 log.info("發(fā)送消息:{}", data);
 session.commit();
 } catch (Exception e) {
 e.printStackTrace();
 } finally {
 try {
 if (producer != null) {
 producer.close();
 }
 if (session != null) {
 session.close();
 }
 if (connection != null) {
 connection.close();
 }
 } catch (Exception e) {
 e.printStackTrace();
 }
 }
 }
}

消費(fèi)者

package com.example.demoactivemq.producer;


import com.example.demoactivemq.domain.MessageModel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;

/**
 * 消費(fèi)者
 */
@Component
@Slf4j
public class Consumer {


 @JmsListener(destination = "delay.queue")
 public void receiveQueue(MessageModel message) {
 log.info("收到消息:{}", message);
 }
}

application.yml

spring:
 activemq:
 broker-url: tcp://localhost:61616

測(cè)試類

package com.example.demoactivemq;

import com.example.demoactivemq.domain.MessageModel;
import com.example.demoactivemq.producer.Producer;
import org.junit.jupiter.api.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.SpringRunner;

@SpringBootTest(classes = DemoActivemqApplication.class)
@RunWith(SpringRunner.class)
class DemoActivemqApplicationTests {

 /**
 * 消息生產(chǎn)者
 */
 @Autowired
 private Producer producer;

 /**
 * 及時(shí)消息隊(duì)列測(cè)試
 */
 @Test
 public void test() {
 MessageModel messageModel = MessageModel.builder()
 .message("測(cè)試消息")
 .titile("消息000")
 .build();
 // 發(fā)送消息
 producer.send(Producer.DEFAULT_QUEUE, messageModel);
 }

 /**
 * 延時(shí)消息隊(duì)列測(cè)試
 */
 @Test
 public void test2() {
 for (int i = 0; i < 5; i++) {
 MessageModel messageModel = MessageModel.builder()
 .titile("延遲10秒執(zhí)行")
 .message("測(cè)試消息" + i)
 .build();
 // 發(fā)送延遲消息
 producer.delaySend(Producer.DEFAULT_QUEUE, messageModel, 10000L);
 }
 try {
 // 休眠100秒,等等消息執(zhí)行
 Thread.currentThread().sleep(100000L);
 } catch (InterruptedException e) {
 e.printStackTrace();
 }
 }
}

執(zhí)行結(jié)果

2019-11-12 22:18:52.939  INFO 17263 --- [           main] c.e.demoactivemq.producer.Producer       : 發(fā)送消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息0)
2019-11-12 22:18:52.953  INFO 17263 --- [           main] c.e.demoactivemq.producer.Producer       : 發(fā)送消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息1)
2019-11-12 22:18:52.958  INFO 17263 --- [           main] c.e.demoactivemq.producer.Producer       : 發(fā)送消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息2)
2019-11-12 22:18:52.964  INFO 17263 --- [           main] c.e.demoactivemq.producer.Producer       : 發(fā)送消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息3)
2019-11-12 22:18:52.970  INFO 17263 --- [           main] c.e.demoactivemq.producer.Producer       : 發(fā)送消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息4)
2019-11-12 22:19:03.012  INFO 17263 --- [enerContainer-1] c.e.demoactivemq.producer.Consumer       : 收到消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息0)
2019-11-12 22:19:03.017  INFO 17263 --- [enerContainer-1] c.e.demoactivemq.producer.Consumer       : 收到消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息1)
2019-11-12 22:19:03.019  INFO 17263 --- [enerContainer-1] c.e.demoactivemq.producer.Consumer       : 收到消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息2)
2019-11-12 22:19:03.020  INFO 17263 --- [enerContainer-1] c.e.demoactivemq.producer.Consumer       : 收到消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息3)
2019-11-12 22:19:03.021  INFO 17263 --- [enerContainer-1] c.e.demoactivemq.producer.Consumer       : 收到消息:MessageModel(titile=延遲10秒執(zhí)行, message=測(cè)試消息4)

上述就是小編為大家分享的怎么在Spring Boot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站欄目:怎么在SpringBoot中利用ActiveMQ實(shí)現(xiàn)一個(gè)延遲消息
文章源于:http://aaarwkj.com/article28/jjhdcp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、網(wǎng)站排名、云服務(wù)器網(wǎng)站制作、品牌網(wǎng)站制作、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)
91在线免费观看国产精品| 日韩精品毛片在线看| 黑人巨大一区二区三区| 日韩av大片一区二区三区| 日韩激情av中文字幕| 永久永久免费黄色一级片| 四虎在线观看永久地址| 亚洲精品一区二区免费看| 欧美亚洲午夜精品久久久| 亚洲欧美综合区丁香六月| 美女视频一区二区三区在线观看| 日韩色欧美色国产精品| 亚洲午夜经典一区二区日韩| 久久久人妻91久久久久| 亚洲av日韩av一区| 在线高清中文字幕三区| 国产黄色看三级91大片| 九九热这里面只有精品| 日韩成人激情在线观看| 国产成人99亚洲综合精品| 国产一区二区高清不卡| 丝袜美腿精尽福利视频网址大全| 久久久久久成人亚洲| 日本顶级片一区二区三区| 国产日韩视频一区二区| 91麻豆亚洲国产成人久久| 成人午夜在线免费观看| 中文字幕av日韩在线| 麻豆视传媒官网免费观看| 国产丝袜美女一区二区| 日韩新片免费专区在线| 日本道欧美一区二区aaaa| 色哟哟91精品色哟哟| 国产一区二区在线粉嫩| 欧美激情在线精品一区二区| 国产国产精品人在线观看 | 99久久久精品国产免费| 日韩特级黄片在线免费观看| 在线观看国产高清自拍| 91人妻精品一区二区| 女同亚洲一区二区三区|