Skip to content

Commit 9e325ac

Browse files
wbinzzhangyougg
authored andcommitted
getQueueAttribute and listQueue
1 parent 9cc0550 commit 9e325ac

File tree

7 files changed

+167
-45
lines changed

7 files changed

+167
-45
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,13 @@
4343
</exclusion>
4444
</exclusions>
4545
</dependency>
46+
47+
<!-- 云API sdk -->
48+
<dependency>
49+
<groupId>com.tencentcloudapi</groupId>
50+
<artifactId>tencentcloud-sdk-java</artifactId>
51+
<version>3.1.423</version>
52+
</dependency>
4653
</dependencies>
4754
<build>
4855
<plugins>

src/main/java/com/qcloud/cmq/Account.java

Lines changed: 42 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@
55

66
import com.qcloud.cmq.entity.CmqConfig;
77
import com.qcloud.cmq.json.*;
8+
import com.tencentcloudapi.common.Credential;
9+
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
10+
import com.tencentcloudapi.common.profile.ClientProfile;
11+
import com.tencentcloudapi.common.profile.HttpProfile;
12+
import com.tencentcloudapi.tdmq.v20200217.TdmqClient;
13+
import com.tencentcloudapi.tdmq.v20200217.models.CmqQueue;
14+
import com.tencentcloudapi.tdmq.v20200217.models.DescribeCmqQueuesRequest;
15+
import com.tencentcloudapi.tdmq.v20200217.models.DescribeCmqQueuesResponse;
816

917
/**
1018
* CMQ_jAVA_SDK_V1.0.2
@@ -100,31 +108,43 @@ public void deleteQueue(String queueName) throws Exception {
100108
* @throws CMQClientException
101109
* @throws CMQServerException
102110
*/
103-
public int listQueue(String searchWord, int offset, int limit, List<String> queueList) throws Exception {
104-
TreeMap<String, String> param = new TreeMap<String, String>();
105-
if (!"".equals(searchWord)) {
106-
param.put("searchWord", searchWord);
107-
}
108-
if (offset >= 0) {
109-
param.put("offset", Integer.toString(offset));
110-
}
111-
if (limit > 0) {
112-
param.put("limit", Integer.toString(limit));
113-
}
114-
115-
String result = this.client.call("ListQueue", param);
116-
CMQTool.checkResult(result);
117-
JSONObject jsonObj = new JSONObject(result);
118-
int totalCount = jsonObj.getInt("totalCount");
119-
JSONArray jsonArray = jsonObj.getJSONArray("queueList");
120-
for (int i = 0; i < jsonArray.length(); i++) {
121-
JSONObject obj = (JSONObject) jsonArray.get(i);
122-
queueList.add(obj.getString("queueName"));
111+
public int listQueue(String searchWord, int offset, int limit, List<String> queueList) {
112+
try{
113+
CmqConfig cmqConfig = client.getCmqConfig();
114+
Credential cred = new Credential(cmqConfig.getSecretId(), cmqConfig.getSecretKey());
115+
String endPoint = cmqConfig.getEndpoint();
116+
String region = CMQTool.convertRegion(endPoint);
117+
DescribeCmqQueuesRequest req = new DescribeCmqQueuesRequest();
118+
if (offset > 0) {
119+
req.setOffset((long) offset);
120+
}
121+
if (limit > 0) {
122+
req.setLimit((long) limit);
123+
}
124+
if (null != searchWord && !"".equals(searchWord)) {
125+
req.setQueueName(searchWord);
126+
}
127+
HttpProfile httpProfile = new HttpProfile();
128+
httpProfile.setEndpoint(cmqConfig.getManagerEndpoint());
129+
ClientProfile clientProfile = new ClientProfile();
130+
clientProfile.setHttpProfile(httpProfile);
131+
TdmqClient client = new TdmqClient(cred, region, clientProfile);
132+
DescribeCmqQueuesResponse resp = client.DescribeCmqQueues(req);
133+
CmqQueue[] cmqQueues = resp.getQueueList();
134+
int totalCount = resp.getTotalCount().intValue();
135+
if (cmqQueues.length > 0) {
136+
for (CmqQueue queue : resp.getQueueList()) {
137+
queueList.add(queue.getQueueName());
138+
}
139+
}
140+
return totalCount;
141+
} catch (TencentCloudSDKException e) {
142+
System.out.println(e.toString());
123143
}
124-
125-
return totalCount;
144+
return 0;
126145
}
127146

147+
128148
/**
129149
* get Queue
130150
*

src/main/java/com/qcloud/cmq/CMQClientInterceptor.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.qcloud.cmq;
22

3+
import com.qcloud.cmq.entity.CmqConfig;
4+
35
import java.util.List;
46
import java.util.Map;
57

@@ -16,6 +18,7 @@ public interface CMQClientInterceptor {
1618

1719
interface Chain {
1820
String call(String action, Map<String, String> param) throws Exception ;
21+
CmqConfig getCmqConfig();
1922
}
2023

2124
class Chains implements Chain {
@@ -31,6 +34,11 @@ public Chains(CMQClient cmqClient, List<CMQClientInterceptor> interceptorList) {
3134
public String call(String action, Map<String, String> param) throws Exception {
3235
return new DefaultChain(cmqClient, interceptorList).call(action, param);
3336
}
37+
38+
@Override
39+
public CmqConfig getCmqConfig() {
40+
return this.cmqClient.cmqConfig;
41+
}
3442
}
3543

3644
class DefaultChain implements Chain {
@@ -54,5 +62,10 @@ public String call(String action, Map<String, String> param) throws Exception {
5462
return interceptorList.get(index++).intercept(action, param, this); // 传this(调度器)用于回调
5563
}
5664
}
65+
66+
@Override
67+
public CmqConfig getCmqConfig() {
68+
return this.cmqClient.cmqConfig;
69+
}
5770
}
5871
}

src/main/java/com/qcloud/cmq/CMQTool.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import java.io.UnsupportedEncodingException;
88
import java.security.InvalidKeyException;
99
import java.security.NoSuchAlgorithmException;
10+
import java.util.HashMap;
11+
import java.util.Map;
1012
import javax.crypto.Mac;
1113
import javax.crypto.spec.SecretKeySpec;
1214

@@ -24,6 +26,27 @@ public class CMQTool {
2426
private static final String HMAC_ALGORITHM = "HmacSHA1";
2527
private static final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
2628

29+
private static final Map<String, String> endPointMap = new HashMap<String,String>(){
30+
{
31+
put("bj","ap-beijing");
32+
put("cd","ap-chengdu");
33+
put("cq","ap-chongqing");
34+
put("gz","ap-guangzhou");
35+
put("hk","ap-hongkong");
36+
put("kr","ap-seoul");
37+
put("sh","ap-shanghai");
38+
put("sg","ap-singapore");
39+
put("de","eu-frankfurt");
40+
put("usw","na-siliconvalley");
41+
put("ca","na-toronto");
42+
put("in","ap-mumbai");
43+
put("use","na-ashburn");
44+
put("th","ap-bangkok");
45+
put("ru","eu-moscow");
46+
put("jp","ap-tokyo");
47+
}
48+
};
49+
2750
public static String base64_encode(byte[] data) {
2851
StringBuffer sb = new StringBuffer();
2952
int len = data.length;
@@ -96,4 +119,14 @@ public static void checkResult(JSONObject jsonObj) {
96119
}
97120
}
98121

122+
public static String convertRegion(String endPoint) {
123+
String rg;
124+
if (endPoint.startsWith("https")) {
125+
rg = endPoint.substring(12, endPoint.indexOf("."));
126+
} else {
127+
rg = endPoint.substring(7, endPoint.indexOf("."));
128+
}
129+
return endPointMap.get(rg);
130+
}
131+
99132
}

src/main/java/com/qcloud/cmq/Queue.java

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,21 @@
11
package com.qcloud.cmq;
22

3+
import com.qcloud.cmq.entity.CmqConfig;
34
import com.qcloud.cmq.entity.CmqResponse;
45
import com.qcloud.cmq.json.JSONArray;
56
import com.qcloud.cmq.json.JSONObject;
67

78
import java.util.ArrayList;
89
import java.util.List;
910
import java.util.TreeMap;
11+
import com.tencentcloudapi.common.Credential;
12+
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
13+
import com.tencentcloudapi.common.profile.ClientProfile;
14+
import com.tencentcloudapi.common.profile.HttpProfile;
15+
import com.tencentcloudapi.tdmq.v20200217.TdmqClient;
16+
import com.tencentcloudapi.tdmq.v20200217.models.CmqQueue;
17+
import com.tencentcloudapi.tdmq.v20200217.models.DescribeCmqQueueDetailRequest;
18+
import com.tencentcloudapi.tdmq.v20200217.models.DescribeCmqQueueDetailResponse;
1019

1120
/**
1221
* Queue class.
@@ -64,30 +73,44 @@ public void setQueueAttributes(QueueMeta meta) throws Exception {
6473
*
6574
* @return 返回的队列属性参数
6675
*/
67-
public QueueMeta getQueueAttributes() throws Exception {
68-
TreeMap<String, String> param = new TreeMap<String, String>();
69-
70-
param.put("queueName", this.queueName);
71-
String result = this.client.call("GetQueueAttributes", param);
72-
JSONObject jsonObj = new JSONObject(result);
73-
CMQTool.checkResult(result);
74-
76+
public QueueMeta getQueueAttributes() {
7577
QueueMeta meta = new QueueMeta();
76-
meta.maxMsgHeapNum = jsonObj.getInt("maxMsgHeapNum");
77-
meta.pollingWaitSeconds = jsonObj.getInt("pollingWaitSeconds");
78-
meta.visibilityTimeout = jsonObj.getInt("visibilityTimeout");
79-
meta.maxMsgSize = jsonObj.getInt("maxMsgSize");
80-
meta.msgRetentionSeconds = jsonObj.getInt("msgRetentionSeconds");
81-
meta.createTime = jsonObj.getInt("createTime");
82-
meta.lastModifyTime = jsonObj.getInt("lastModifyTime");
83-
meta.activeMsgNum = jsonObj.getInt("activeMsgNum");
84-
meta.inactiveMsgNum = jsonObj.getInt("inactiveMsgNum");
85-
meta.rewindmsgNum = jsonObj.getInt("rewindMsgNum");
86-
meta.minMsgTime = jsonObj.getInt("minMsgTime");
87-
meta.delayMsgNum = jsonObj.getInt("delayMsgNum");
88-
meta.rewindSeconds = jsonObj.getInt("rewindSeconds");
89-
90-
78+
try{
79+
CmqConfig cmqConfig = client.getCmqConfig();
80+
Credential cred = new Credential(cmqConfig.getSecretId(), cmqConfig.getSecretKey());
81+
String endPoint = cmqConfig.getEndpoint();
82+
String region = CMQTool.convertRegion(endPoint);
83+
HttpProfile httpProfile = new HttpProfile();
84+
httpProfile.setEndpoint(cmqConfig.getManagerEndpoint());
85+
ClientProfile clientProfile = new ClientProfile();
86+
clientProfile.setHttpProfile(httpProfile);
87+
TdmqClient client = new TdmqClient(cred, region, clientProfile);
88+
DescribeCmqQueueDetailRequest req = new DescribeCmqQueueDetailRequest();
89+
req.setQueueName(this.queueName);
90+
DescribeCmqQueueDetailResponse resp = client.DescribeCmqQueueDetail(req);
91+
CmqQueue cmqQueue = resp.getQueueDescribe();
92+
meta.maxMsgHeapNum = cmqQueue.getMaxMsgHeapNum().intValue();
93+
meta.pollingWaitSeconds = cmqQueue.getPollingWaitSeconds().intValue();
94+
meta.visibilityTimeout = cmqQueue.getVisibilityTimeout().intValue();
95+
meta.maxMsgSize = cmqQueue.getMaxMsgSize().intValue();
96+
meta.msgRetentionSeconds = cmqQueue.getMsgRetentionSeconds().intValue();
97+
meta.createTime = (int)(cmqQueue.getCreateTime()/1000);
98+
meta.lastModifyTime = (int)(cmqQueue.getLastModifyTime()/1000);
99+
meta.activeMsgNum = cmqQueue.getActiveMsgNum().intValue();
100+
meta.inactiveMsgNum = cmqQueue.getInactiveMsgNum().intValue();
101+
if (null != cmqQueue.getRewindMsgNum()) {
102+
meta.rewindmsgNum = cmqQueue.getRewindMsgNum().intValue();
103+
}
104+
if (null != cmqQueue.getMinMsgTime()) {
105+
meta.minMsgTime = cmqQueue.getMinMsgTime().intValue();
106+
}
107+
if (null != cmqQueue.getDelayMsgNum()) {
108+
meta.delayMsgNum = cmqQueue.getDelayMsgNum().intValue();
109+
}
110+
meta.rewindSeconds = cmqQueue.getRewindSeconds().intValue();
111+
} catch (TencentCloudSDKException e) {
112+
System.out.println(e.toString());
113+
}
91114
return meta;
92115
}
93116

src/main/java/com/qcloud/cmq/entity/CmqConfig.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class CmqConfig {
1111
private String secretKey;
1212
private String method = "POST";
1313
private String signMethod = "sha1";
14+
private String managerEndpoint = "tdmq.tencentcloudapi.com";
1415

1516
public CmqConfig() {}
1617

@@ -153,4 +154,12 @@ public long getSlowThreshold() {
153154
public void setSlowThreshold(long slowThreshold) {
154155
this.slowThreshold = slowThreshold;
155156
}
157+
158+
public String getManagerEndpoint() {
159+
return managerEndpoint;
160+
}
161+
162+
public void setManagerEndpoint(String managerEndpoint) {
163+
this.managerEndpoint = managerEndpoint;
164+
}
156165
}

src/test/java/com/qcloud/cmq/QueueTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,4 +446,21 @@ public void run() {
446446

447447
}
448448

449+
@Test
450+
public void testGetQueueAttribute() {
451+
Queue queue = account.getQueue("wbin_test_queue");
452+
QueueMeta meta2 = queue.getQueueAttributes();
453+
Assert.assertEquals(10, meta2.pollingWaitSeconds);
454+
Assert.assertEquals(30, meta2.visibilityTimeout);
455+
Assert.assertEquals(1048576, meta2.maxMsgSize);
456+
Assert.assertEquals(3600, meta2.msgRetentionSeconds);
457+
}
458+
459+
@Test
460+
public void testQueueList() {
461+
List<String> vtQueue = new ArrayList<>();
462+
int total = account.listQueue("", -1, -1, vtQueue);
463+
Assert.assertEquals(55, total);
464+
}
465+
449466
}

0 commit comments

Comments
 (0)