2013-02-11 51 views
6

यह here वर्णित यमर समय एनोटेशन का उपयोग करके मेरे संघर्ष का अनुवर्ती है।yammer @ शून्य पर मूल्य छोड़ने के लिए

मेरे वसंत प्रसंग फ़ाइल बस है:

import com.yammer.metrics.annotation.ExceptionMetered; 
import com.yammer.metrics.annotation.Metered; 
import com.yammer.metrics.annotation.Timed; 

... 

@Component 
public class GetSessionServlet extends HttpServlet { 

    private final static Logger log = LoggerFactory.getLogger(GetSessionServlet.class); 


    @Override 
    public void init(final ServletConfig config) throws ServletException { 
    super.init(config); 
    SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(
      this, config.getServletContext()); 
    } 

    @Override 
    @Timed(name = "get-session", rateUnit = TimeUnit.MILLISECONDS) 
    @Metered 
    @ExceptionMetered(name = "get-session-failures", rateUnit = TimeUnit.MILLISECONDS) 
    public void doGet(final HttpServletRequest req, 
      final HttpServletResponse resp) throws ServletException, IOException { 
    final String sessionId = req.getParameter("sessionId"); 
    final String fields = req.getParameter("fields"); 
    final String format = req.getParameter("format"); 
    if (StringUtils.isEmpty(sessionId)) { 
     resp.getWriter().write("sessionId parameter missing!\n"); 
     return; 
    } 
    ... 
    } 

मैं mvn clean tomcat7:run साथ स्थानीय रूप से मेरी अनुप्रयोग चलाने के लिए और फिर JConsole कनेक्ट:

<metrics:annotation-driven /> 

मैं निम्नलिखित वर्ग की है।

एमबीन टैब में, मैं अपने GetSessionServlet कक्षा के पैकेज नाम के साथ तीन उपफोल्डर doGet (@Metered संख्याओं के लिए), सत्र-सत्र, और सत्र-विफलताओं के साथ एक प्रविष्टि देख सकता हूं।

हालांकि, इससे कोई फर्क नहीं पड़ता कि मैं अपने सर्वलेट को कितनी बार कॉल करता हूं, उपरोक्त उप-फ़ोल्डर्स में सभी मान शून्य पर रहते हैं। मैं क्या खो रहा हूँ? इसके अलावा, इन मीट्रिक मीट्रिक पर दस्तावेज़ जो official documentation से अधिक विवरण में जाता है, की सराहना की जाएगी।

उत्तर

5

मुझे लगता है कि मुझे यह काम मिल गया है।

पहली बात मैंने देखा था कि नमूना वसंत प्रसंग फ़ाइल का schemaLocation विशेषता में यूआरआई: http://www.yammer.com/schema/metrics/metrics.xsd एक 404 त्रुटि देता है।

मैंने यह देखने के लिए समस्या को गुमराह किया कि क्या किसी ने स्कीमा के बारे में शिकायत की है और यह थ्रेड, github.com/codahale/metrics/issues/322 पाया है, जिसमें कोई उपयोगकर्ता टिप्पणी करता है कि मेट्रिक्स-वसंत मॉड्यूल को हटा दिया गया है कोर मेट्रिक्स भंडार और यहां स्थानांतरित किया गया: github.com/ryantenney/metrics-spring।

कि वेबसाइट पर उदाहरण के बाद, मैं बाहर पुराने मीट्रिक-वसंत निर्भरता मेरी पोम से छीन लिया और कहा कि निम्नलिखित:

<dependency> 
     <groupId>com.ryantenney.metrics</groupId> 
     <artifactId>metrics-spring</artifactId> 
     <version>2.1.4</version> 
    </dependency> 

मैं तो मेरे वसंत-context.xml फ़ाइल में xmlns घोषणा अद्यतन:

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:metrics="http://www.ryantenney.com/schema/metrics" 
     xsi:schemaLocation=" 
      http://www.ryantenney.com/schema/metrics 
      http://www.ryantenney.com/schema/metrics/metrics.xsd 
      ...other schemas..."> 

जोड़ा गया एनोटेशन संचालित तत्व:

<metrics:annotation-driven proxy-target-class="true" /> 

मैं enab कक्षा आधारित ऑटोवॉयरिंग काम करने के लिए प्रॉक्सी-लक्ष्य-वर्ग का नेतृत्व किया।

और सेम मैं समय चाहता था में आँकड़े हर 10 सेकेंड डंप करने के लिए एक ConsoleReporter सक्षम करने के लिए @Timed एनोटेशन और एक @PostConstruct विधि कहा:

@PostConstruct 
public void init() { 
    ConsoleReporter.enable(10, TimeUnit.SECONDS);  
} 

@Timed 
public void doService(...) { 
    .... do stuff .... 
} 

मैं तो मेरे webapp शुरू .... और वसंत context.xml फ़ाइल पार्सिंग sax पार्सर से एक ग़लत त्रुटि मिली।

यह रूप में अच्छी तरह लगता है कि www.ryantenney.com/schema/metrics/metrics.xsd 404s!

इस के लिए वैकल्पिक हल आसान था, हालांकि, मैं GitHub रिपोजिटरी से XSD डाउनलोड किया गया: https://github.com/ryantenney/metrics-spring/blob/master/src/main/resources/com/ryantenney/metrics/spring/config/metrics-3.0.xsd

और फिर src/मुख्य/संसाधन/META-INF मेरी Maven परियोजना की निर्देशिका में निम्न फ़ाइलें जोड़ा :

META-INF/ 
    - spring.schemas 
    - xsd/ 
     - metrics.xsd 

जहां metrics.xsd XSD GitHub से डाउनलोड की गई फ़ाइल है, और spring.schemas एक पाठ फ़ाइल है जिसमें:

http\://www.ryantenney.com/schema/metrics/metrics.xsd=META-INF/xsd/metrics.xsd 

spring.schemas फ़ाइल वसंत द्वारा स्टार्टअप पर पढ़ी जाती है और इसे स्थानीय फ़ाइल से xsd खींचने के लिए कहती है।

ऊपर जगह में मैं सफलतापूर्वक मेरी एप्लिकेशन को आग करने में सक्षम था और अंत बिंदु सेवा विधि का इस्तेमाल किया है कि हिट के साथ

सांत्वना मैं वास्तव में देखा था निम्नलिखित हर 10 सेकंड फेंक दिया देखना:

com.sample.service.MyServiceClass: 
doService: 
    count = 8 
    mean rate = 0.27 calls/s 
    1-minute rate = 0.23 calls/s 
    5-minute rate = 0.21 calls/s 
    15-minute rate = 0.20 calls/s 
    min = 0.13ms 
    max = 19.59ms 
    mean = 2.59ms 
    stddev = 6.87ms 
    median = 0.18ms 
+1

spring.schemas फ़ाइल मेट्रिक्स-spring.jar में शामिल है लेकिन यदि आप मेवेन छाया प्लगइन का उपयोग कर रहे हैं तो आपको उपयोग करने की आवश्यकता है AppendingTransformer spring.schemas फ़ाइलों को concatenate (ओवरराइट नहीं) करने के लिए छाया बताने के लिए कहें (देखें: http://maven.apache.org/plugins/maven-shade-plugin/examples/resource-transformers.html#AppendingTransformer) –

+0

मेरे पास है वही समस्या और सत्यापित है कि मेरे पास आपके द्वारा वर्णित चीजें हैं I मैं नवीनतम 3.0.3 का उपयोग कर रहा हूँ। मेरा कंसोल रिपोर्टर काम कर रहा है लेकिन यह सिर्फ सभी शून्य प्रिंट करता है। कोई त्रुटि लॉग या कुछ भी नहीं। आप किसी और चीज का उल्लेख करने के लिए अनदेखा कर सकते हैं? धन्यवाद – codesalsa

3

मैंने एक समान प्रश्न here पोस्ट किया और बहुत कुछ नहीं मिला। यह मुझे बताया गया था कि मुझे शायद 0 अंक मिल रहे थे क्योंकि "स्प्रिंग कक्षा में ही उस विधि को बुलाए जाने पर एक एनोटेटेड विधि को रोक नहीं सकती है।" हालांकि मैंने पहले उस टिप्पणी को पढ़ा था, मुझे एहसास नहीं हुआ था कि मैं इस स्थिति में था, लेकिन HttpServlet के स्रोत को देखकर, मैं वास्तव में ऐसा करने के तरीके देखता हूं जो कॉल करते हैं।

हालांकि कि प्रतिबंध अकेले झटका है, मुझे कोई दूसरी कक्षा में मेरी doGet से एक विधि लागू के लिए रवाना हुए देखने के लिए अगर मुझे लगता है कि जिस तरह से समय प्रदर्शन कर सकता है (बोझिल लेकिन तैयार देने के लिए है कि एक कोशिश):

import org.springframework.stereotype.Component; 
import com.yammer.metrics.annotation.Metered; 
import com.yammer.metrics.annotation.Timed; 

@Component 
public class Delay { 
    //  @Metered 
    @Timed 
    public void time() { 
    System.out.println("Timing..."); 
    try { 
     Thread.sleep(1000); 
    } catch (final InterruptedException e) { 
     e.printStackTrace(); 
    } 
    } 
} 

फिर भी, मेरी सर्वलेट गेटर से इस विधि बुला इस प्रकार है:

public void doGet(final HttpServletRequest req, 
     final HttpServletResponse resp) throws ServletException, IOException { 

    final Delay delay = new Delay().time(); 

अभी भी मुझे Delay.time विधि के लिए किसी भी गैर-शून्य संख्या कोई बात नहीं कितनी बार मैं एक मिलता है नहीं दिखाती है।

इस बिंदु पर, मैं उत्तेजक स्टैंड लेने जा रहा हूं कि इन टिप्पणियों के साथ जो भी प्रतिबंध आते हैं और पूर्ण दस्तावेज़ीकरण और उपयोगी कोड उदाहरणों की कमी के कारण, ये एनोटेशन कम से कम समय के संदर्भ में उपयोगी नहीं हैं सर्वलेट।

मैं गलत साबित होना चाहता हूं और खुशी से एक और जवाब स्वीकार करने के लिए अपना वोट बदल दूंगा क्योंकि इन टिप्पणियों को मेट्रिक्स.न्यू टिमर और समान तरीकों से उपयोग करने के लिए आशाजनक और अधिक व्यावहारिक लग रहा था।

+0

यदि आप करते हैं 'नई विलंब()', उस वस्तु नहीं वसंत जीवन चक्र का हिस्सा है, इसलिए मीट्रिक-वसंत कभी नहीं विधि आमंत्रण को रोकने का मौका है। अगर आप यह नहीं कहते थे कि मेरी परियोजना बेकार है तो समस्या की सराहना करते हैं, जब समस्या कोर स्प्रिंग अवधारणाओं की मूलभूत गलतफहमी है। –

+2

@RyanTenney मुझे खेद है कि अगर मैंने आपको नाराज किया और सराहना की, तो ईमानदारी से, आपने जो विकसित किया। मैंने सोचा कि मैं अपने फैसले के संदर्भ में बहुत विशिष्ट था। मैं यह भी कह रहा था कि मुझे गलत साबित होने में खुशी होगी, और मैंने जवाब देने के लिए अपना वोट बदल दिया जो इस काम को करने का एक तरीका दिखाता है। ऐसा कहा जा रहा है, यह अभी भी उपकरण की उपयोगिता के लिए प्रासंगिक प्रतीत होता है कि मुझे इस मुद्दे के बारे में कोई दस्तावेज नहीं मिला और यह कि एकमात्र (और महान) उत्तर मैं यहां स्पष्टीकरण के 2 पृष्ठों में फिट हुआ। मैंने यह नहीं कहा या इसका मतलब यह नहीं है कि परियोजना बेकार है, इससे दूर। – Lolo

+0

@Lolo क्या आपने इसे काम करने के लिए प्रबंधित किया था? मेरे पालतू परियोजना में एक समान परिदृश्य है ... – Parobay