posts - 88, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          通過rest api管理activemq

          Posted on 2016-10-22 17:31 Milo的海域 閱讀(1441) 評論(0)  編輯  收藏 所屬分類: Java

          知道activemq現在已經支持了rest api, 但是官方對這部分的介紹一筆帶過 (http://activemq.apache.org/rest.html),


          通過google居然也沒搜到一些有用的, 比如像刪除一個destination, 都是問的多,然后沒下文. 于是花了一些心思研究了一下:


          首先通過rest api獲取當前版本所有已支持的協議

              http://172.30.43.206:8161/api/jolokia/list


          然后根據json輸出關于removeTopic, removeQueue的mbean實現通過rest api刪除destination的方法, 注意到用GET請求而不是POST,不然會報錯 (官網的例子里用的wget給的靈感, 開始用了POST老報錯)


          import org.apache.activemq.command.ActiveMQQueue;
          import org.apache.activemq.command.ActiveMQTopic;
          import org.apache.http.auth.AuthScope;
          import org.apache.http.auth.UsernamePasswordCredentials;
          import org.apache.http.impl.client.BasicCredentialsProvider;
          import org.apache.http.impl.client.DefaultHttpClient;
          import org.springframework.http.HttpEntity;
          import org.springframework.http.HttpHeaders;
          import org.springframework.http.HttpMethod;
          import org.springframework.http.MediaType;
          import org.springframework.http.ResponseEntity;
          import org.springframework.http.client.ClientHttpRequestFactory;
          import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
          import org.springframework.web.client.RestTemplate;

          import javax.jms.Destination;
          import javax.jms.JMSException;
          import java.util.Arrays;


          public class MessageQueueAdmin {
              
          private static final RestTemplate restTemplate = getRestTemplate("admin""admin");

              
          private static String brokerHost = "172.30.43.206";
              
          private static String adminConsolePort = "8161";
              
          private static String protocol = "http";

              
          public static void removeDestination(Destination destination) throws JMSException {
                  String destName, destType;
                  
          if (destination instanceof ActiveMQQueue) {
                      destName 
          = ((ActiveMQQueue) destination).getQueueName();
                      destType 
          = "Queue";
                  } 
          else {
                      destName 
          = ((ActiveMQTopic) destination).getTopicName();
                      destType 
          = "Topic";
                  }

                  
          // build urls
                  String url = String.format("%s://%s:%s/api/jolokia/exec/org.apache.activemq:" +
                          
          "brokerName=localhost,type=Broker/remove%s/%s", protocol, brokerHost, adminConsolePort, destType, destName);
                  System.out.println(url);
                  
          // do operation
                  HttpHeaders headers = new HttpHeaders();
                  headers.setAccept(Arrays.asList(MediaType.APPLICATION_JSON));
                  HttpEntity
          <String> entity = new HttpEntity<String>("parameters", headers);
                  ResponseEntity response 
          = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
                  System.out.println(response.getBody());
              }

              
          public static void main(String[] args) throws JMSException {
                  ActiveMQTopic topic 
          = new ActiveMQTopic("test-activemq-topic");
                  removeDestination(topic);
              }


              
          private static RestTemplate getRestTemplate(String user, String password) {
                  DefaultHttpClient httpClient 
          = new DefaultHttpClient();
                  BasicCredentialsProvider credentialsProvider 
          = new BasicCredentialsProvider();
                  credentialsProvider.setCredentials(AuthScope.ANY, 
          new UsernamePasswordCredentials(user, password));
                  httpClient.setCredentialsProvider(credentialsProvider);
                  ClientHttpRequestFactory rf 
          = new HttpComponentsClientHttpRequestFactory(httpClient);

                  
          return new RestTemplate(rf);
              }
          }

          其他的請求,應該都是類似jolokia的exec get request的格式:


          https://jolokia.org/reference/html/protocol.html#exec


          <base url>/exec/<mbean name>/<operation name>/<arg1>/<arg2>/.
          主站蜘蛛池模板: 阳曲县| 秦皇岛市| 津市市| 长兴县| 英吉沙县| 姜堰市| 湟源县| 武隆县| 论坛| 彭泽县| 建水县| 涟水县| 灵山县| 长春市| 苍南县| 紫阳县| 福海县| 河池市| 称多县| 扬中市| 乳源| 盐池县| 元阳县| 西华县| 吴江市| 杂多县| 奇台县| 永顺县| 青阳县| 贵南县| 定远县| 嘉黎县| 德化县| 湘西| 商河县| 资阳市| 霸州市| 灌阳县| 镇巴县| 中阳县| 偏关县|