47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| @startuml
 | |
| package com.iluwatar.throttling {
 | |
|   class App {
 | |
|     - LOGGER : Logger {static}
 | |
|     + App()
 | |
|     + main(args : String[]) {static}
 | |
|     - makeServiceCalls(tenant : Tenant, callsCount : CallsCount) {static}
 | |
|   }
 | |
|   ~class B2BService {
 | |
|     - LOGGER : Logger {static}
 | |
|     - callsCount : CallsCount
 | |
|     + B2BService(timer : Throttler, callsCount : CallsCount)
 | |
|     + dummyCustomerApi(tenant : Tenant) : int
 | |
|     - getRandomCustomerId() : int
 | |
|   }
 | |
|   class CallsCount {
 | |
|     - LOGGER : Logger {static}
 | |
|     - tenantCallsCount : Map<String, AtomicLong>
 | |
|     + CallsCount()
 | |
|     + addTenant(tenantName : String)
 | |
|     + getCount(tenantName : String) : long
 | |
|     + incrementCount(tenantName : String)
 | |
|     + reset()
 | |
|   }
 | |
|   class Tenant {
 | |
|     - allowedCallsPerSecond : int
 | |
|     - name : String
 | |
|     + Tenant(name : String, allowedCallsPerSecond : int, callsCount : CallsCount)
 | |
|     + getAllowedCallsPerSecond() : int
 | |
|     + getName() : String
 | |
|   }
 | |
| }
 | |
| package com.iluwatar.throttling.timer {
 | |
|   class ThrottleTimerImpl {
 | |
|     - callsCount : CallsCount
 | |
|     - throttlePeriod : int
 | |
|     + ThrottleTimerImpl(throttlePeriod : int, callsCount : CallsCount)
 | |
|     + start()
 | |
|   }
 | |
|   interface Throttler {
 | |
|     + start() {abstract}
 | |
|   }
 | |
| }
 | |
| B2BService -->  "-callsCount" CallsCount
 | |
| ThrottleTimerImpl -->  "-callsCount" CallsCount
 | |
| ThrottleTimerImpl ..|> Throttler 
 | |
| @enduml |