Pro Microservices in .NET 6: With Examples Using ASP.NET Core 6, MassTransit, and Kubernetes 1st Edition Sean Whitesell - Quickly download the ebook to never miss any content
Pro Microservices in .NET 6: With Examples Using ASP.NET Core 6, MassTransit, and Kubernetes 1st Edition Sean Whitesell - Quickly download the ebook to never miss any content
com
https://ebookmeta.com/product/pro-microservices-in-
net-6-with-examples-using-asp-net-core-6-masstransit-and-
kubernetes-1st-edition-sean-whitesell/
OR CLICK HERE
DOWLOAD EBOOK
https://ebookmeta.com/product/fractional-order-electrical-circuit-
theory-cpss-power-electronics-series-zhang-bo/
ebookmeta.com
The Trouble With Us (Forbidden Love #2) 1st Edition Kat T.
Masen
https://ebookmeta.com/product/the-trouble-with-us-forbidden-
love-2-1st-edition-kat-t-masen/
ebookmeta.com
https://ebookmeta.com/product/beauty-and-the-assassin-1st-edition-
nadia-lee/
ebookmeta.com
WWI Tales from the Trenches The Great War Series Book 1
1st Edition Daniel Wrinn
https://ebookmeta.com/product/wwi-tales-from-the-trenches-the-great-
war-series-book-1-1st-edition-daniel-wrinn/
ebookmeta.com
https://ebookmeta.com/product/the-canons-and-decrees-of-the-council-
of-trent-1st-edition-rev-fr-h-j-schroeder/
ebookmeta.com
Rob Richardson
Gilbert, AZ, USA
Matthew D. Groves
Grove City, OH, USA
The publisher, the authors and the editors are safe to assume that the
advice and information in this book are believed to be true and accurate
at the date of publication. Neither the publisher nor the authors or the
editors give a warranty, expressed or implied, with respect to the
material contained herein or for any errors or omissions that may have
been made. The publisher remains neutral with regard to jurisdictional
claims in published maps and institutional affiliations.
Scott Hunter
VP Director, Azure Developer Experience
Microsoft
Introduction
The microservice architecture breaks software into smaller pieces that
can be independently deployed, scaled, and replaced. There are many
benefits to this modern architecture, but there are more moving pieces.
In the olden days, we compiled the entire software product into one
piece and deployed it infrequently. Deployment was hard, so we opted
not to do it very often. With the advent of containers, deployment has
become much easier. We can now break our application into lots of
little pieces – microservices. When one microservice needs more
horsepower, we can scale up only this portion of the web property. If a
feature needs to work differently, we can deploy only this microservice,
avoiding the churn with the entire system.
With this power come some additional layers of complexity. In the
legacy monolithic software applications, we merely made a function call
if we wanted to call into another part of the system. Our internal
methods now have IP addresses, multiple instances, maybe load
balancers distributing the load, and many more moving pieces.
How do we discover the address of the microservice? How do we
scale to just the right level of availability without wasted cost? This is
the magic of microservices, and this is the purpose of this book. You’ll
learn how to design, architect, scale, monitor, and containerize
applications to build robust and scalable microservices.
—Sean Whitesell
I would like to thank the Lord whose inspiration I rely on daily. His
help has been instrumental in accomplishing this work.
—Rob Richardson
I’d like to acknowledge my patient wife Ali, Kevin and Mary Groves,
and all of my Twitch audience that helped me to learn this
microservices stuff.
—Matt Groves
Table of Contents
Chapter 1:Introducing Microservices
Benefits
Team Autonomy
Service Autonomy
Scalability
Fault Isolation
Data Autonomy
Challenges to Consider
Microservice Beginning
Architecture Comparison
Microservice Patterns
API Gateway/BFF
External Configuration Store
Messaging
Business Process Communication
Message Format
Transport
Testing
Test Pyramid
E to E
Service
Unit Tests
Automation
Deploying Microservices
Versioning
Containers
Pipelines
Cross-Cutting Concerns
Monitoring
Logging
Alerting
Testing the Architecture
Summary
Chapter 2:ASP.NET Core Overview
A Brief History of .NET
Long-Term Support
Presentation Frameworks
Installing Requirements
Installing .NET 6.0 and ASP.NET Core
Installing Visual Studio
Installing Visual Studio Code
.NET 6.0 at a Glance
MVC at a Glance
Routing
Controller
View
Model
ASP.NET Core Middleware
ASP.NET Core Web API
Razor Pages
Minimal APIs
Summary
Chapter 3:Searching for Microservices
The Business
Domain-Driven Design
Domain
Subdomains
Ubiquitous Language
Bounded Contexts
Aggregates and Aggregate Roots
Event Storming
Setup
Color Coding
The Meeting
Seeing the Domains
Domain Models
Focus on Behavior
Domain Modelling
Decomposition
Becoming a Microservice
Summary
Chapter 4:First Microservice
Interprocess Communication
API First Design
Transport Mechanisms
REST
gRPC
File – New – Project
Contacting Google’s Distance API
App Settings
New Class Library
Map Info Controller
Testing What We Have
Swagger
Leveraging gRPC
Incorporating gRPC
Testing gRPC Endpoint
Modify the Monolith
Service Discovery
Summary
Chapter 5:Microservice Messaging
Issues with Synchronous Communication
Limits of RPC
Messaging
Architecture
Reasons to Use Messaging
Message Types
Message Routing
Broker-less
Brokered
Consumption Models
Competing Consumers
Independent Consumers
Delivery Guarantees
At Most Once
At Least Once
Once and Only Once
Message Ordering
Building the Examples
Building the Messaging Microservices
Running RabbitMQ
First Project
Building the Invoice Microservice
Building the Payment Microservice
Building a Test Client
Testing What We Have
Play-by-Play Explanation
Drawbacks of Messaging
Summary
Chapter 6:Decentralizing Data
Current State
The Rule
Database Choices
Availability
Sharing Data
Duplicate Data
Transactional Consistency
CAP Theorem
Transactions Across Microservices
Sagas
CQRS
Event Sourcing
Scenarios
Eventual Consistency
Data Warehouse
Materialized View
Splitting the Monolith
Moving Code
Strangler Pattern
Feature Flags
Splitting the Database
Summary
Chapter 7:Testing Microservices
Cost of Errors
What Not to Test
What to Test
Code
Performance
System Failure Handling
Security
Testing Levels
Unit Testing
Integration Testing
Component Testing
Contract Testing
Service Testing
End-to-End Testing
Consumer-Driven Contract Testing Deep Dive
Consumer Project
Consumer Test Project
Provider Project
Provider Test Project
Testing Messaging-Based Microservices
Testing Consumer Messaging
Testing Producer Messaging
Summary
Chapter 8:Containerization
Why Containers?
It Works on My Machine!
Onboarding
Microservices
What Is Docker?
Installing Docker
Docker Basics
Docker run
Docker stop
Docker start
Docker ps
Docker images
Docker inspect
Docker rm and rmi
Microservices and Docker
Adding Docker Support
Create ASP.NET Image
Use Docker-Compose
Push to Docker Hub
Build an Image
Docker push
Kubernetes
Kubernetes on Azure:AKS
Azure Portal
Azure CLI
Connect to the Cluster
Define Kubernetes Objects
Deploy to the Cluster
Deploying Databases
Summary
Chapter 9:Healthy Microservices
Is It Healthy?
Where Do We Look?
Logging
Logging with ASP.NET Core and Serilog
Avoiding “God” Classes
Metrics
Prometheus and Grafana
ASP.NET Prometheus Sink
Tracing
About OpenTelemetry
Add OpenTelemetry to .NET
Visualize Tracing Trees in Jaeger
Effective Monitoring
Debugging with Logs
Summary
Index
About the Authors
Sean Whitesell
is a Microsoft MVP and cloud architect at
TokenEx, where he designs cloud-based
architectural solutions for hosting
internal services for TokenEx. He serves
as President of the Tulsa Developers
Association. He regularly presents in the
community at developer events,
conferences, and local meetups.
Rob Richardson
is a software craftsman, building web
properties in ASP.NET and Node, React,
and Vue. He is a Microsoft MVP;
published author; frequent speaker at
conferences, user groups, and
community events; and a diligent
teacher and student of high-quality
software development. You can find his
recent work at
robrich.org/presentations.
Matthew D. Groves
is a Microsoft MVP who loves to code.
From C# to jQuery, or PHP, he will
submit pull requests for anything. He got
his start writing a QuickBASIC point-of-
sale app for his parents’ pizza shop back
in the 1990s. Currently a Product
Marketing Manager for Couchbase, he is
the author of the book AOP in .NET and
created the video “Creating and
Managing Your First Couchbase Cluster.”
About the Technical Reviewer
Mike Benkovich
A developer, business owner, consultant,
cloud architect, Microsoft Azure MVP,
and an online instructor, Mike
Benkovich is an alumni of Microsoft
from 2004 to 2012 where he helped
build developer communities across the
United States, through work on Microsoft
Across America, MSDN Events, MSDN
Webcasts, DPE, and Channel 9. He’s
helped to create and grow developer
conferences and user groups in various
cities across the United States. While at
Microsoft he helped create the Azure
Boot Camp events that were run in cities
across the United States and at PDC and
TechEd before it was transferred to the
community. In his spare time he helped start a Toastmaster club for
Geeks called TechMasters in Minneapolis where we grow speakers for
conferences. He’s a LinkedIn Learning Instructor for Azure, having
developed many online courses. Mike actively works in Azure Cloud
Governance, Application Architecture, and Software Delivery
consulting.
© Sean Whitesell, Rob Richardson, Matthew D. Groves 2022
S. Whitesell et al., Pro Microservices in .NET 6
https://doi.org/10.1007/978-1-4842-7833-8_1
1. Introducing Microservices
Sean Whitesell1 , Rob Richardson2 and Matthew D. Groves3
(1) KIEFER, OK, USA
(2) Gilbert, AZ, USA
(3) Grove City, OH, USA
Twitter, PayPal, and Netflix had serious problems. Problems like scaling,
quality, and downtime became common and increasing issues. Each had
a large, single-code base application known as a “monolith.” And each
hit different frustration points where a fundamental architecture
change had to occur. Development and deployment cycles were long
and tedious, causing delays in feature delivery. Each deployment meant
downtime or expensive infrastructure to switch from one set of servers
to another. As the code base grew, so did the coupling between
modules. With coupled modules, code changes are more problematic,
harder to test, and lower overall application quality.
For Twitter, scaling servers was a huge factor that caused downtime
and upset users. All too often, users would see an error page stating
Twitter is overcapacity. Many users would see the “Fail Whale” while
the system administrators would reboot servers and deal with the
demand. As the number of users increased, so did the need for
architecture changes. From the data stores, code, and server topology,
the monolithic architecture hit its limit.
For PayPal, their user base increased the need for guaranteed
transactions. They scaled up servers and network infrastructure. But,
with the growing number of services, the performance hit a tipping
point, and latency was the result. They continuously increased the
number of virtual machines to process the growing number of users
and transactions. This added tremendous pressure on the network,
thereby causing latency issues.
Netflix encountered problems with scaling, availability, and speed of
development. Their business required 24 × 7 access to their video
streams. They were in a position where they could not build data
centers fast enough to accommodate the demand. Their user base was
increasing, and so were the networking speeds at homes and on
devices. The monolithic application was so complex and fragile that a
single semicolon took down the website for several hours.
In and of themselves, there is nothing wrong with a monolith.
Monoliths serve their purpose, and when they need more server
resources, it is usually cheap enough to add more servers. With good
coding practices, a monolith can sustain itself very well. However, as
they grow and complexity increases, they can reach a point that feature
requests take longer and longer to implement. They turn into “monolith
hell.” It takes longer to get features to production, the number of bugs
increases, and frustration grows with the users. Monolith hell is a
condition the monolith has when it suffers from decreased stability,
difficulty scaling, and nearly impossible to leverage new technologies.
Applications can grow into a burden over time. With changes in
developers, skillsets, business priorities, etc., those applications can
easily turn into a “spaghetti code” mess. As the demands of those
applications change, so do the expectations with speed of development,
testing, and deployment. By pulling functionality away from monolithic
applications, development teams can narrow their focus on
functionality and respective deployment schedule. This allows a faster
pace of development and deployment of business functionality.
In this chapter, you will learn about the benefits of using a
microservices architecture and the challenges of architecture changes.
You will then learn about the differences between a monolithic
architecture and a microservices architecture. Next, we will begin
looking at microservices patterns, messaging, and testing. Finally, we
will cover deploying microservices and examine the architectured
infrastructure with cross-cutting concerns.
Benefits
For large applications suffering from “monolith hell,” there are several
reasons they may benefit by converting to a microservice architecture.
Development teams can be more focused on business processes, code
quality, and deployment schedules. Microservices scale separately,
allowing efficient usage of resources on infrastructure. As
communication issues and other faults occur, isolation helps keep a
system highly available. Lastly, with architectural boundaries defined
and maintained, the system can adapt to changes with greater ease. The
details of each benefit are defined in the following.
Team Autonomy
One of the biggest benefits of using a microservice architecture is team
autonomy. Companies constantly need to deliver more features in
production in the fastest way possible. By separating areas of concern
in the architecture, development teams can have autonomy from other
teams. This autonomy allows teams to develop and deploy at a pace
different than others. Time to market is essential for most companies.
The sooner features are in production, the sooner they may have a
competitive edge over competitors.
It also allows for but does not require different teams to leverage
different programming languages. Monoliths typically require the
whole code base to be in the same language. Because microservices are
distinctly different applications, they open the door to using different
languages, allowing flexibility in fitting the tool to the task at hand.
With data analytics, for example, Python is the most common
programming language used and works well in microservice
architectures. Mobile and front-end web developers can leverage
languages best suited for those requirements, while C# is used with
back-end business transaction logic.
With teams dedicated to one or more microservices, they only hold
the responsibility for their services. They only focus on their code
without the need to know details of code in other areas.
Communication will need to be done regarding the API endpoints of the
microservices. Clients need to know how to call these services with
details such as HTTP verb and payload model, as well as the return data
model. There is an API specification available to help guide the
structure of your API. Consider the OpenAPI Initiative
(https://www.openapis.org/) for more information.
Service Autonomy
As team autonomy focuses on the development teams and their
responsibilities, service autonomy is about separating concerns at the
service layer. The “Single Responsibility Principle” applies here as well.
No microservice should have more than one reason to change. For
example, an Order Management microservice should not also consist of
business logic for Account Management. By having a microservice
dedicated to specific business processes, the services can evolve
independently.
Not all microservices exist alone with the processing of business
logic. It is common to have microservices call others based on the data
to process. The coupling is still loose and maintains the flexibility of
code evolution.
With loose coupling between microservices, you receive the same
benefits as when applied at the code level. Upgrading microservices is
easier and has less impact on other services. This also allows for
features and business processes to evolve at different paces.
The autonomy between microservices allows for individual
resiliency and availability needs. For example, the microservice
handling credit card payment has a higher availability requirement
than handling account management. Clients can use retry and error
handling policies with different parameters based on the services they
are using.
Deployment of microservices is also a benefit of service autonomy.
As the services evolve, they release separately using “Continuous
Integration/Continuous Deployment” (CI/CD) tools like Azure DevOps,
Jenkins, and CircleCI. Individual deployment allows frequent releases
with minimal, if any, impact on other services. It also allows separate
deployment frequency and complexity than with monolithic
applications. This supports the requirement of zero downtime. You can
configure a deployment strategy to bring up an updated version before
taking down existing services.
Scalability
The benefit of scalability allows for the number of instances of services
to differentiate between other services and a monolithic application.
Generally, monolithic applications require larger servers than those
needed for microservices. Having microservices lets multiple instances
reside on the same server or across multiple servers, which aids in fault
isolation. Figure 1-1 shows a relationship between the number of code
instances and the size of the code.
Fault Isolation
Fault isolation is about handling failures without them taking down an
entire system. When a monolith instance goes down, all services in that
instance also go down. There is no isolation of services when failures
occur. Several things can cause failure:
Coding or data issues
Extreme CPU and RAM utilization
Network
Server hardware
Downstream systems
With a microservice architecture, services with any of the preceding
conditions will not take down other parts of the system. Think of this as
a logical grouping. In one group are services and dependent systems
that pertain to a business function. The functionality is separate from
those in another group. If a failure occurs in one group, the effects do
not spread to another group. Figure 1-2 is an oversimplification of
services dependent on other services and a dependency on a data store.
Data Autonomy
So far, there have been many reasons presented for using a
microservice architecture. But they focus on the business processes.
The data is just as important, if not more so. Monolithic applications
with the symptoms described earlier most certainly rely on a data
store. Data integrity is crucial to the business. Without data integrity, no
company will stay in business for long. Can you imagine a bank that
“guesses” your account balance?
Microservices incorporate loose coupling, so changes deploy
independently. Most often, these changes also contain schema changes
to the data. New features may require new columns or a change to an
existing column, as well as for tables. The real issue occurs when the
schema change from one team impacts others. This, in turn, requires
the changes to be backward compatible. Additionally, the other team
affected may not be ready to deploy at the same time.
Having data isolated per microservice allows independent changes
to occur with minimal impact on others. This isolation is another factor
that encourages quicker time to production for the business. Starting a
new feature with a new microservice with new data is great. Of course,
that is easy to implement.
With separate databases, you also get the benefit of using differing
data store technologies. Having separate databases provides an
opportunity for some data to be in a relational database like SQL Server,
while others are in non-relational databases like MongoDB, Azure
Cosmos DB, and Azure Table Storage. Having a choice of different
databases is another example of using the right tool for the job .
Challenges to Consider
Migrating to a microservice architecture is not pain-free and is more
complex than monoliths. You will need to give yourself room to fail.
Even with a small microservice, it may take several iterations to get to
exactly what you need. And you may need to complete many rounds of
refactoring on the monolith before you can support relocating
functionality to a microservice. Developing microservices requires a
new way of thinking about the existing architecture, such as the cost of
development time and infrastructure changes to networks and servers.
If coming from a monolith, you will need to make code changes to
communicate with the new microservice instead of just a simple
method call. Communicating with microservices requires calls over a
network and, most often, using a messaging broker. You will learn more
about messaging later in this chapter.
The size of the monolithic applications and team sizes are also
factors. Small applications, or large applications with small teams, may
not see the benefits. The benefits of a microservice architecture appear
when the overwhelming problems of “monolith hell” are conquered by
separating areas.
Many companies are not ready to take on the challenges and simply
host monolithic applications on additional servers and govern what
business logic they process. Servers are relatively cheap, so spreading
the processing load is usually the easiest “quick” solution. That is until
they end up with the same issues as PayPal, Twitter, and others.
Developers may push back on the idea of microservice
development. There is a large learning curve for the intricate details
that need to be understood. And many developers will remain
responsible for various parts of the monolithic applications, so it may
feel like working on two projects simultaneously. There will be the
ongoing question of quality vs. just getting something to production.
Cutting corners will only add code fragility and technical debt and may
prolong a successful completion.
A challenge every team will face is code competency. Developers
must take the initiative to be strong with the programming language
chosen and embrace distributed system design. Design patterns and
best practices are great as they relate to the code in monoliths and
inside the microservices. But new patterns must also be learned with
how microservices communicate, handling failures, dependencies, and
data consistency.
Another challenge for teams developing microservices is that there
is more than code to consider. In the later section on “Cross-Cutting
Concerns,” items are described that affect every microservice, therefore
every developer. Everyone should be involved in understanding (if not
also creating) the items that help you understand the health of the
architectural system. User stories or whatever task-based system you
use will need additional time and tasks. This includes helping with
testing the system and not just the microservices.
Microservice Beginning
With a primary system needing to work with other systems, there arose
an issue of the primary system being required to know all the
communication details of each connected system. The primary system,
in this case, is your main application. Since each connected system had
its own way of storing information, services it provided, and
communication method, the primary system had to know all these
details. This is a “tightly coupled” architecture. Suppose one of the
connected systems changes to another system, a tremendous amount of
change was required. Service-Oriented Architecture (SOA) aimed to
eliminate the hassle and confusion. By using a standard communication
method, each system could interact with less coupling.
The Enterprise Service Bus (ESB), introduced in 2002, was used to
communicate messages to the various systems. An ESB provides a way
for a “Publish/Subscribe” model in which each system could work with
or ignore the message as they were broadcasted. Security, routing, and
guaranteed message delivery are also aspects of an ESB.
When needing to scale a service, the whole infrastructure had to
scale as well. With microservices, each service can scale independently.
By shifting from ESB to protocols like HTTP, the endpoints become
more intelligent about what and how to communicate. The messaging
platform is no longer required to know the message payload, only the
endpoint to give it to. “Smart Endpoints, Dumb Pipes” is how Martin
Fowler succinctly stated.
So why now, in the last few years, have microservices gained
attention? With the cost of supportive infrastructure, it is cheaper to
build code and test to see if one or more microservices are the right
way to go. Network and CPU have tremendously increased in power
and are far more cost-effective today than yesteryear. Today, we can
crunch through substantial amounts of data using mathematical
models with data analytics and are gaining knowledge at a faster rate.
For only $35, a Raspberry Pi can be bought and utilized to host
microservices!
Cost is a huge factor, but so are the programming languages and
platforms. Today, more than a handful of languages like C#, Python, and
Node are great for microservices. Platforms like Kubernetes, Service
Fabric, and others are vastly capable of maintaining microservices
running in Docker containers. There are also far more programmers in
the industry that can quickly take advantage of architectural patterns
like SOA and microservices.
With the ever-increasing demand for software programmers, there
also exists the demand for quality. It is way too easy for programmers
to solve simple problems and believe they are “done.” In reality, quality
software is highly demanding of our time, talents, and patience. Just
because microservices are cheaper and, in some cases, easier to create,
they are by no means easy.
Architecture Comparison
Since most microservices stem from a monolithic application, we will
compare the two architectures. Monoliths are the easiest to create, so it
is no surprise this architecture is the de facto standard when creating
applications. Companies need new features quickly for a competitive
edge over others. The better and quicker the feature is in production,
the sooner anticipated profits are obtained. So, as nearly all
applications do, they grow. The code base grows in size, complexity, and
fragility. In Figure 1-3, a monolith is depicted that contains a user
interface layer, a business logic layer with multiple services, and a
persistence layer.
Microservice Patterns
Every microservice architecture has challenges such as accessibility,
obtaining configuration information, messaging, and service discovery.
There are common solutions to these challenges called patterns.
Various patterns exist to help solve these challenges and make the
architecture solid.
API Gateway/BFF
The API Gateway pattern provides a single endpoint for client
applications to the microservices assigned to it. Figure 1-6 shows a
single API Gateway as an access point for multiple microservices. API
Gateways provide functionality such as routing to microservices,
authentication, and load balancing.
Figure 1-6 Single API Gateway access point
Depending on the scale of the architecture and business needs, a
single API Gateway may cause another problem. The number of client
applications may increase. The demands from those client applications
may grow. At some point, separation should be done to split client
applications apart by using multiple API Gateways. Design pattern
Backends for Frontends (BFF), helps with this segregation. There are
multiple endpoints, but they are designated based on the types of
clients being served.
Figure 1-7 Designated API Gateway endpoints
In this example, depicted in Figure 1-7, one application calling the
microservices could be an MVC web application, whereas another client
could be a mobile application. Also depicted is for connections from 3rd
party consumers.
Mobile clients usually do not get/need all the content compared to a
full website. Using the BFF pattern with API Gateways allows for that
separation of handling the differences.
Consider the end user may be responsible for data usage charges. If
the mobile application does not need that much information “ready”
compared to the full website version, then the separation of end-user
view management calls for the BFF pattern.
There are precautions when using an API Gateway pattern. There is
a coupling of microservices to the API Gateway. As microservices
evolve, so does the infrastructure. API Gateways must be maintained so
there is not too much coupling. An API Gateway should not be more
responsible than necessary. There may be a point at which multiple API
Gateways are created, and microservices split between them. This
would help with another precaution where the API Gateway can be a
bottleneck and may add to any latency issues.
External Configuration Store
Nearly all microservices will need configuration information, just like
monoliths. With the ability to have many microservices instances, it
would be impractical for each instance to have its own configuration
files. Updating information across all running instances would be
overwhelming. Instead, using the External Configuration Store pattern
provides a common area to store configuration information. This means
there is one source of the configuration values.
The configuration information could be stored in a data store such
as SQL Server or Azure Cosmos DB. Environment-specific settings could
be stored in different Configuration Stores allowing the same code to
work in Dev vs. Staging or Production. Of course, each instance will
need to know how to get to the Configuration Store. This information is
in the local configuration files. This means there is just enough
information in these files on where and how to get all other application
settings.
The information in the Configuration Store may change at any time.
A challenge here is knowing when to get the settings. The code can
either get all the settings at startup or as needed. If only retrieving at
startup, then the behavior of the microservice will not change until
restarted. With some settings, this is fine, such as retrieving the
environment it is running in. This may be useful with logging. If the
microservice is running in Dev, then the verbosity of logging is much
higher. If not Dev, then only log the additional information in certain
conditions like error handling. That setting is not likely to change. Some
settings do change and should be checked often. Settings like an HTTP
timeout value or a maximum number of retries in a business function
may change and affect the behavior.
Messaging
As microservices are designed to fit various business needs, their
communication methods must also be considered. With monolithic
applications, methods simply call other methods without the need to
worry about where that method resides. With distributed computing,
those methods are on other servers. Interprocess communication (IPC)
Other documents randomly have
different content
the north. There came, too, the Irish Mummers or Rhymers, making
their Christmas rounds with torches and drums, wearing the
traditional pointed caps, and carrying their profits in the base money,
one part of silver to three of brass, which Elizabeth forced upon
Ireland in favour of her avaricious Treasurer there, Sir George Carey.
Of this money, such as it was, the Rhymers were “cleaned out” by
the officers in a game of dice, and sent on their long walk home
across Lecale two hours after the winter midnight, “without money;
out of spirits; out of order; without even saying ‘Farewell’”—a
strange contrast to the old Irish welcome to travellers and wandering
players—a gallant hospitality at the Christmas time of English
officers, for whom no season of mercy was sacred, and no obligation
of honour, straight dealing, or courtesy binding so far as Irishmen
were concerned. The rhymers may have sung as they took their way
the fame of the hero-warrior of their people: “Were but the brown
leaf which the wood sheds from it gold, were but the white billows
silver, Finn would have given it all away.” They may have recalled the
lament of the old Irish poet who saw the havoc made by
“outlanders” of the ordered hospitality of Irish society. “At the end of
the final world [there will be] a refuge to poverty and stinginess and
grudging.” They could not see in the far future the open castle of
Ardglass.
Cards, dice, drinking, and smoking filled up the time of the
English visitors, with strolls of curiosity to the Wells and Chair of St.
Patrick at Struel, or the huge entrenchments of Celtchair of the
Battles. For the night there was a single sleeping-room above the
hall, a bed-chamber “arranged in the Irish fashion” with a good and
soft bed of down for the owner, and thin pallets thrown on the floor
for the company. The dogs of Captain Constable shared the room
with the rest, after the Yorkshire manner, leaping on the down bed
and howling at their rejection.
When Morrison left Downpatrick there came Captain Edward
Cromwell—descendant of Thomas Cromwell, minister of ill-fame to
Ireland under Henry viii.—to be Governor of Lecale (1605): “this son
of earth and foul spot on the human race,” by whose army the
cathedral of Down was burned, and in that conflagration sacred
monuments and very ancient writings; and many other churches too,
very few of which have been since then restored. The very
tombstones were used in building houses and fences; while the
people watching lamented the devastation of what had been to them
and their fathers “the place of their resurrection,” so that they might
go in the fellowship of their saints “to the great assembly of Doom.”
To Edward Cromwell the people gave the name “Maol-na-teampull”
for his impiety, and numbers of men born in that terrible year of ruin
reckoned their age over sixty years after from the days of his
sacrilege, as if from a national visitation. In those days perhaps the
Irish inhabitants were driven off the fertile land to the very rim of the
sea, to set their cabins, as may still be seen, on the last refuge of
the shingle itself round the Dundrum bay, or to cluster together on
some bare crag.
After the wars of Mountjoy and of Cromwell and the plantations
of their officers the fortunes of Lecale, as of all Ireland, declined.
With the final ruin of the O’Neills the clouded title of the Fitzgeralds
revived, in a dim shadow of their old pride. A branch of the family
built, in the eighteenth century, a sober mansion over the “New
Works” that had been raised when Ireland claimed her right to trade,
and around the towers that marked ancient centuries of battle. Even
there the old Fitzgerald fires of patriotism and indignation at
inhuman wrong broke out anew. The character of Lord Edward
Fitzgerald is as little comprehended as the spirit of his country. A
Protestant brought up in the days of penal laws and Protestant
ascendancy; a member of the great house of the Duke of Leinster in
Ireland and the Duke of Richmond in England; trained in an army
fighting for “the Empire” against American “rebels”; his life till
twenty-seven was chiefly spent in France, America, and England,
amid military and aristocratic society—conditions that have made
many a man cosmopolitan, denationalised, and indifferent. The
liberal traditions of his father, the first Duke of Leinster, had
practically died with him when the boy was only ten. Ardently
devoted to his family, there was not one of them, or one of his early
friends, to whom he could speak of his national beliefs. And out of all
this came the lover of the poor and the oppressed, the friend of all
men, the intrepid martyr to the freedom of Catholic Ireland, dying
alone in prison with a prayer for the salvation of all who died at the
hangman’s hands for the sake of Ireland. No wonder that the people
of Ardglass still show the tower chamber in the old castle which was
searched for Lord Edward, the room in the great house where he
was said to have hidden, the rude bridge that gave him shelter from
the yeomanry, and the desolate site of Bone castle where he slept
for one night, in an ancient possession of his family.
In the course of the gloomy years that followed the old house fell
into decay. Last June (1911) the whole derelict property, long
deserted by its landlords, both land and village, was sold for the
benefit of English mortgagees and bought by local people. Nothing
more “loyal” could be imagined than the apparent community of
Ardglass—nothing more to the heart of the party in Down and
Antrim of superiority and supremacy which claims sole right to a
place in the sun. The Imperial flag flew from a high-lifted residence,
on the site of two of the old forts. The FitzGerald house and
demesne were bought by a golf club, reputed to be faithful above all
to English interests. The old castle was bid for by a spirit-dealer of
the right persuasion, as a suitable storage place for whiskey. Not a
breath as to the destiny of Ardglass and its fishermen disturbed the
peace of Orangemen and stalwart Protestants of the ascendancy.
It occurred, however, to a good Irishman and antiquary, a
Protestant from Belfast, that there might be a nobler use for the
Castle of Ardglass. He bought the castle. He replaced the vanished
floors and ceilings with beams and boards of Irish timber. A few
broken pieces of masonry were repaired. The inside walls were left in
their rough state, merely dashed with white. At the door was laid the
anvil of an Irish smith to be held between the knees, a stone with
the centre cut out and fitted with iron. The great fire-places were
filled with logs from a local plantation. Over the flaming fires huge
pots steamed, hanging from iron crooks. Old Ulster ironwork for
kitchen use hung round the hearth. A dresser, such as Captain
Bodley might have seen, was stocked with pewter plates and old
crockery, brought, like the ironwork, by willing givers who possessed
any relic of Ireland of former days. Tables of Irish oak, and Irish
carved benches of the old fashion, and Irish cupboards and settles
furnished the rooms. They were lighted by Irish-made candles in the
iron taper-holders of over a hundred years ago, by a very remarkable
bronze chandelier of the eighteenth century, and by a still more
striking floreated cross and circle of lights, made in the penal days by
some local metal-worker with the ancient Irish tradition of ornament
still with him. In the chief room a few old prints and portraits hung
on the walls, amid new banners representing O’Neill, O’Donnell, and
the black Raven of the Danes; most prominent of all, Shane O’Neill
himself, standing proud in his full height in regal saffron kilt and
flowing mantle, a fine design by a young Irish artist of Belfast. A tiny
round-apsed oratory opened off this chief room. It was hung with
golden Irish linen; between the lights on the altar stood a small
crucifix of the penal times, and interlaced Irish patterns hung on the
walls. The columbary in one of the towers, perhaps unique in early
castles, with its seventy-five triangular recesses or resting-places for
the pigeons built in the walls, and entries to north and south—one a
square opening with sill inside and alighting slab outside, the other a
space cut below the narrow window exactly the size through which a
bird might pass—was again stocked with pigeons given by a local
admirer, and the tower named after St. Columba. From a pole flew
the flag of O’Neill, the Red Right Hand, in memory of old days. In
three months the deserted ruin was transformed into a
dwellinghouse, where Mr. Bigger and his helpers could sleep and
cook and live. The workmen in a fury of enthusiasm worked as if a
master’s eye was on them at every minute.
NOTE.
Bodley’s visit to Lecale, preserved in a Latin MSS. in the British
Museum, has been printed with a translation in the Old Ulster Journal of
Archæology II. 73. The account is concerned with six officers of high rank
and fame in the veteran army of Elizabeth. The writer, Captain Bodley,
brother of the founder of the Bodleian Library at Oxford, was commanding
officer at Armagh, commissioned to raise fortifications or entrenchments
for the army—“a very honest fellow with a black beard,” he describes
himself. His companion Captain Toby Caulfield, who had fought at
Carlingford and Kinsale, was the first Governor in 1602 of the new fort of
Charlemont, and Governor in 1603 of the counties of Armagh and Tyrone,
where he made good use of his opportunities, a skilful appropriator of
lands, who secured for himself grants in nine counties, and the wealth on
which the earldom of Charlemont was established. Captain John Jephson
had rescued the remnant of the British army caught in the pass of the
Curlew Mountains in 1599: he gained the Mallow estate by marriage with
the daughter of Norreys, President of Munster. Captain Adderton, whom
they picked up on the way, had distinguished himself in the Wicklow wars,
and was now Governor of the newly-built fort of Mount-norris, on the road
from Armagh to Newry.
Their host at Downpatrick, Sir Richard Moryson, one of the chief
friends of Mountjoy, had fought in Leix and at Kinsale, was now Governor
of Lecale, and this same year (1603) was promoted Governor of
Waterford, and later (1607), President of Munster. With him was Captain
Ralph Constable, who had followed all his campaigns from Kinsale to the
Blackwater.
Four of the six, Moryson, Bodley, Jephson, and Caulfield, had been
comrades in the campaigns of the Low Countries a few years before, and
were among the companies of soldiers which were drafted over from the
Netherlands to Ireland to strengthen the armies of Essex and Mountjoy.
They were men who prospered in Irish wars—keen soldiers, and as keen
dividers of lands and offices in the new country, deeply concerned in
plantations and confiscations.
I
N the Quarterly Review of January last there appeared an article
by Mr. Robert Dunlop, dealing in a trenchant manner with a book
which I wrote lately, The Making of Ireland and Its Undoing. I
regret to take part personally in a controversy where my own
credit is brought into question, and I am only moved to do so by
consideration of the grave issues which are involved as regards the
study of Irish history.
The appearance of my book has raised two questions of a very
different order—the important question of whether, with the advance
of modern studies, need has arisen for an entire review of the whole
materials for Irish history and of the old conclusions, and the less
interesting problem of my own inadequacy and untrustworthiness.
Mr. Dunlop, in some fifteen pages of discourse, has not so much as
mentioned the first. He has treated the second at considerable
length. We may here take them in order of importance.
The real difference between Mr. Dunlop and myself lies deeper
than the question of my merits or demerits. It is the old conflict
between tradition and enquiry. For the last 300 years students of
medieval Irish history have peacefully trodden a narrow track,
hemmed in by barriers on either hand. On one side they have been
for the most part bounded by complete ignorance of the language of
the country or its literature. On the other side they have raised the
wall of tradition. Along this secluded lane writers have followed one
another, in the safety of the orthodox faith. A history recited with
complete unanimity takes on in course of time the character of the
highest truth. There have been disputes on one or two points
perhaps where theologians are concerned, as for example the story
of St. Patrick; but on the general current of Irish life there has been
no serious discussion nor any development in opinion. The argument
from universal assent has been sufficient. There is a similarity even
of phrase. “We prefer to think,” writes Mr. Dunlop. “We prefer to
abide by the traditional view of the state of Ireland,” writes another
critic from the same school. Agreement has been general, individual
speculation has not disturbed the peace, and all have joined their
voices to swell the general creed. Under these favouring conditions
historians of Ireland speak with a rare confidence and unanimity.
“What are novelties after all?” cries the sagacious historian imagined
by M. Anatole France: “mere impertinences.”
It has happened to me to question the received doctrine.
Universal assent of all men of all time is a very useful thing, and for
some positive facts it may be decisive. But in Irish history it is used
to enforce a series of negations—no human progress, no spiritual
life, no patriotism, no development, no activity save murder, no
movement but a constant falling to decay, and a doomed lapse into
barbarism of every race that entered the charmed circle of the
island. However universal the consent, the statements of the
tradition are of so extraordinary a character, that one may fairly
desire an inspection of the evidence. I have ventured to suggest that
the time had come to study the sources anew; to see if any had
been omitted, or if in modern research any new testimony
concerning Ireland had been brought to light; to give less weight to
negative assertions than to positive facts; and to enquire what the
whole cumulative argument might imply. Thus the fundamental
problem has been raised. If Mr. Dunlop has not a word to say about
it, it will nevertheless not disappear. The enquiry will need many
scholars and a long time, but I am sure it will be completed, and that
Irish history will then need to be re-written. Meanwhile, as I claim no
infallible authority, to fulminate against me does not get rid of the
essential problem. The discrediting of a doubter of the orthodox faith
is the simplest form of argument and the least laborious. The trouble
is that when it is done the real question is no further advanced.
A heretic must take his risks. We have an example of their gravity
in this article, in which Mr. Dunlop restores an old custom to
controversy. We had almost come to suppose that it was the
privilege of theologians to settle the respective platforms from which
disputations should be carried on. The higher plane is reserved for
the orthodox. The “querulous” dissentient, on the other hand, is
pronounced to be making mere incursions into what is for him a
comparatively unknown region, his incapacity is obvious and his
want of candour deplorable, and he has forfeited all claim to respect.
This is all in the appropriate manner of those who hold an Irish
history handed down by tradition.
The permitted belief about Ireland has been summed up
dogmatically by Mr. Dunlop in the Dictionary of National Biography,
the Cambridge Modern History, and elsewhere. Of the inhabitants of
Ireland “two-thirds at least led a wild and half nomadic existence.
Possessing no sense of national unity beyond the narrow limits of the
several clans to which they belonged, acknowledging no law outside
the customs of their tribe, subsisting almost entirely on the produce
of their herds and the spoils of the chase, and finding in their large
frieze mantles a sufficient protection against the inclemency of the
weather, and one relieving them from the necessity of building
houses for themselves, they had little in their general mode of life to
distinguish them from their Celtic ancestors.” “Outside the pale there
was nothing worthy of being called a Church. To say that the Irish
had relapsed into a state of heathenism is perhaps going too far. The
tradition of a Christian belief still survived; but it was a lifeless,
useless thing.” The country was “cut off by its position, but even
more by the relapse of the greater of its inhabitants into a state of
semi-barbarism, from the general currents of European
development.” Bogs and woods, the lairs of the wild-boar and the
wolf, made internal communications dangerous and difficult, and
prevented trade and intercourse with other nations. Few words,
therefore, are needed to sum up their commerce. “French wines
found their way into the country through Cork and Waterford; the
long-established relations between Dublin and Bristol still subsisted;
Spanish traders landed their wares on Galway quay; the fame of St.
Patrick’s purgatory attracted an occasional pilgrim from foreign
lands; and of one Irish chieftain it was placed on record that he had
accomplished the hazardous journey to Rome and back.” Shane
O’Neill, “champion of Celtic civilisation,” could speak no language but
Irish, and could not sign his name. In the Quarterly Review we have
a few more details—that the main part of the Irishmen’s dress was
skins; that this people who lived without houses when they went on
their “marauding expeditions” (excursions of the full summer time)
made to themselves tents of untanned skins to cover them (here I
could almost imagine Mr. Dunlop, in spite of his aversion to bards,
indulging on the sly in a cloudy reminiscence of an Irish poet); that
among the whole of them they had just a few hundred coracles
made of osiers and skins for crossing swollen rivers, for the
O’Malleys and O’Driscolls who had long-boats represented “perhaps
the Iberian element in the nation,” suggests Mr. Dunlop, not to give
the Gaels any credit, while he slips by the way into the objectionable
word apparently so hard to avoid; that they made no practical use
even of their inland fisheries, and had no industries, so that even the
cloth was made by Englishmen.
We would desire to ask Mr. Dunlop for the exact proof he relies
on for any one of these statements, beginning perhaps with “no law
outside the customs of the tribe.” Writers who hold Ireland to be, as
he says, “a sort of scrap-heap for Europe,” and who cannot conceive
of medieval Irishmen as ordinary men sharing the faults and virtues
of other white Europeans, are addicted to the word “native”—a word
not in common use among historians for Englishmen in England in
the Middle Ages, but affected by them to indicate Irishmen in
Ireland, with the derogatory sense which their “tradition” requires.
The vulgar view received as it were official recognition half a century
ago from Mr. Hamilton in his preface to the State Papers of 1509-73
(see also references in my book, 487-8), where he explains that the
study of Irish life till Elizabethan times will be of considerable value
in the study of Universal History, Ireland being so remote from the
earlier seats of civilisation that the rude way of living described by
Hesiod and the old poets still lingered there till the sixteenth century;
till which time “most of the wild Irish led a nomade life, tending
cattle, sowing little corn, and rarely building houses, but sheltered
alike from heat and cold, and moist and dry, by the Irish cloak.” The
last fifty years, we see, amid the general shaking of dry bones and
the movement of history elsewhere, have brought no stir in Irish
history. That alone stands like eternal truth fixed and unchangeable.
Hence, doubtless, Mr. Dunlop’s canon (Quart. Rev., 1906) forbidding
“a history of Ireland in more than one volume.”
The barbarian legend has got a long start. A first attempt to
review its evidence was made in my book. In a series of social
studies I have endeavoured to discuss, not the whole of Irish history,
but definite matters of trade, social life, and education. I have
gathered a body of facts which indicate that Ireland had considerable
manufactures; that her foreign commerce can be traced throughout
Europe; that there was an orderly society, even a wealthy one; that
Irish travellers were known at Rome and in the Levant; that there
was an Anglo-Irish culture by no means contemptible, in touch with
Continental learning; and that increasing intercourse of the races did
not tend to barbarism but to civilisation.
In this sketch I have not proposed to myself to draw nice
distinctions between what the Normans precisely did, and what the
Irish (or even, following Mr. Dunlop), what Iberians were doing in
the sixteenth century in the joint work of commerce and culture,
because there is as yet no sufficient material for that discussion; I
share this lack of knowledge with many who have pronounced
themselves with no uncertain voice. Further, I should have been glad
to confine these studies to the cheerful progress of trade and
culture; but I was confronted with two possible objections. The
suggestion that if there had been any considerable trade it would not
have vanished by a freak, could only be answered by indicating how
and why the destruction had been wrought. And to meet the
argument that historians would not have let a genuine story perish, I
gave my opinion on how it was that the truth dropped out of sight.
My conclusions conflict with the venerable traditions over which
Mr. Dunlop mounts guard. I clearly offend also against the canon of
one volume. It is obvious that he must feel for me the sharpest
disapproval; and this censure is conveyed with no mitigation of
phrase or manner.
The charge he elaborates against me is briefly that I have no
judgment, and less candour, in the use of documents, and have thus
produced a mass of mischievous fiction.
I may say in passing that Mr. Dunlop’s severity with regard to
authorities comes somewhat oddly from one who has shown himself
fairly easy in such matters. In his own writings he gives no
references, and in this same article the only authority he quotes
independently is Mr. O’Connor’s Elizabethan Ireland. When I have to
be silenced, “Turn we to Mr. O’Connor!” Now Mr. O’Connor has
written a slight sketch of Irish political and social life in some 280
pages. He gives no dates, no indications of place, and no references.
But we have Mr. Dunlop’s word for it that it is a “scholarly” work. “Mr.
O’Connor” quoted by Mr. Dunlop ends controversy. The tradition is
secure. I might envy Mr. Dunlop this freedom from trammels of
references, of date, or of place. In such wide and impartial survey
any statement about Ireland may appear as true of every place and
of all time. Barbarism would seem to be a fixed and unchanging
state, a passive monotony, from the time of “Lacustrine habitations”
and of “Hesiod and the old poets,” till its characteristic representative
in Shane O’Neill. The principle once assumed, any evidence will
suffice to show that the Irish had none of the attributes of ordinary
white Europeans; while evidence that they made money, traded,
built houses, talked Latin, studied medicine and law, or otherwise
behaved like other people of the Middle Ages, is probably
rhodomontade, moonshine, or historical profligacy.
Mr. Dunlop’s summary method with unfamiliar sources appears in
his asperity towards what he calls my “trivial references” to Mr.
Standish Hayes O’Grady’s Catalogue of Manuscripts.
“We wonder (he says on p. 267) how many of Mrs. Green’s
readers are aware that of this book, from which she has gleaned so
much information—of a sort—only one copy, so far as we know, is
accessible to the public, and that is in the MSS. Department of the
British Museum. The book, we understand, was never published. It is
still incomplete. The official copy consists merely of the bound sheets
as they were printed off for proof.”
I suppose Mr. Dunlop does not mean to suggest that the value of
a book is in proportion to the number of copies, or that an authority
of which a single copy exists should not be quoted. In any case I can
reassure him. The sheets of this Catalogue have been these many
years past for sale to the public at the Museum, where I got my
copy, and I hope many others did the same. The book can be bought
in a London shop to-day. Mr. Dunlop might consult it in the London
Library. The copy placed in the National Library in Dublin in 1895 has
been in frequent use since then. Possibly Mr. Dunlop knows the
inside of the book better than the outside, but it seems to be a new
acquaintance, suddenly introduced and viewed with distaste. In this
brilliant Catalogue we have the work of a very great authority,
unsurpassed in his special learning, far beyond what O’Donovan
could lay claim to; with its “information—of a sort—” it is the most
important book that has appeared for many years with regard to
Irish history. Another critic of Mr. Dunlop’s school, who in his remarks
gives no definite sign of any knowledge of Mr. O’Grady’s work, has
reproached me for referring to it “without further sifting.” But it is
certain that neither of these writers who reprove me will themselves
do much “further sifting” where that admirable scholar has gone
before them.
May I add that Mr. Dunlop does not appear to follow too closely
modern studies on Irish affairs, or he would surely have known of
Mr. Justice Madden’s Classical Learning in Ireland, published last
summer—a little book which he should certainly have been willing to
include in any review of recent Irish writings?
To return, however, to my own lamentable want of candour and
accuracy, I now give a few of the instances of my deficiencies, and
of the admirable example which Mr. Dunlop sets me in these
respects.
Mr. Dunlop states, “to speak accurately,” that my reference to
Shane O’Neill as “done to death” (so he expresses it) by the English
is “absolutely without foundation.” His own account of Shane’s death
in the Dictionary of National Biography tells us that “possibly if he
could have kept a civil tongue in his head the MacDonnells might
have consented to a reconciliation.” “It is doubtful whether his
assassination was premeditated ... it is probable that when heated
with wine he may have irritated them by his insolent behaviour
beyond endurance.” In the Cambridge Modern History (iii. 592),
however, Mr. Dunlop has attained conviction. “In his wine-cups,” he
tells us, “he began to brawl, and was literally hacked in pieces by his
enemies.” These and some other of his suppositions do not appear to
agree with the story in Holinshed, Campion, the Calendar of State
Papers, or the Four Masters. But why does Mr. Dunlop disagree with
Lord Deputy Sidney, the main mover in the matter? Many efforts, it is
well known, had been made to murder Shane. In 1566 Sidney sent
to Scotland his “man,” the English-Scot Douglas, who had come to
him from Leicester himself. Sidney gives us the clue to his mission. “I
pray you,” he wrote to Leicester, “let this bringer (Douglas) receive
comfortable words of you. I have found him faithful, it was he that
brought the Scots that killed O’Neill.” Douglas repeated the boast
and prayed a reward from Cecil. Years later Sidney, being maligned
by powerful enemies at Court, reminded the Queen of his old
services. “And whereas he [O’Neill] looked for service at their [the
Scots] hands against me, for service of me, they killed him.... But
when I came to the Court,” he added with indignation, “it was told
me it was no war that I had made, nor worthy to be called a war, for
that Shane O’Neill was but a beggar, an outlaw, and one of no force,
and that the Scots stumbled on him by chance.” Would Mr. Dunlop,
as a means of overthrowing me, join with Sidney’s enemies to rob
him of the deed he boasted of? (Vide Sid. Let. 12, 34-5; C.S.P. i.
430; Car. ii. 338, 340-1.)
I have pained Mr. Dunlop by referring to the hoard of Con O’Neill,
Earl of Tyrone, as evidence that Ulster was not penniless. Mr. Dunlop
discovers that Shane O’Neill “robbed his father” of this store, and can
scarcely believe that I adduce this “robbery” to prove the wealth of
Ulster, and that I use it in connection with a passage about plunder
of Ireland by English invaders. This hoard occurs in a list of three
pages containing signs of riches in Ireland (pp. 67-69), a mere
glance at which would show the absurdity of any contention that all
the moneys I mention fell into English hands. As to Con O’Neill’s
savings, I see no objection to an allusion to them as one proof
among others of money and plate in Ulster. I do not know if Mr.
Dunlop means not only to suggest my want of candour, but also to
prove that if Shane “robbed” his father’s treasure, therefore no
English soldiers or officials robbed any Irish chief of his plate or
wealth.
But though in this connection I have really nothing to do with the
ultimate fate of Con’s hoard, I may in passing compare the Lord
Chancellor Cusack’s report at the time with Mr. Dunlop’s “robbery.”
Con O’Neill was thrown into prison in Dublin in 1552, and said to be
threatened with death. The English were prepared with an
illegitimate successor in Tyrone. Shane claimed to be his father’s
lawful heir, and fought the English nominee. A garrison of English
soldiers was thrown into Armagh. Beyond the Blackwater Ford,
within a ride of Armagh, lay the chief fort of Tyrone, on the great hill
of Dungannon. Shane, evidently with the support of his people,
“came to Dungannon,” and took with him “of the chief’s treasure
£800 in gold and silver besides plate and other stuff” [apparently
then not the whole of it, but so much as was needed for the war at
the moment] “and retaineth the same as yet, whereby it appeareth
that he and she [the Earl and Countess] was content with the same;
for,” said Cusack, “it could not be perceived that they were greatly
offended for the same.” This was how Shane O’Neill “robbed his
father.”
Mr. Dunlop quotes a sentence that “Galway ships sailed to Orkney
and to Lübeck,” and gives one only of my references in the note,
which states that a Scottish ship of Orkney was freighted at Galway
for Lisbon. It is evident that by one of the accidental errors of
transcription, which every writer that ever lived has sometimes to
deplore, I transferred the words, and Orkney was used where I
meant to write Lisbon. Lübeck is a different matter. Why did Mr.
Dunlop carefully omit the reference in the same note to the page
where I mention goods shipped from Galway to Lübeck in 1416? Was
it a generous effort to make the error take on a more serious
character? Or was it a common inaccuracy? I may inform him that in
the Hansisches Urkundenbuch further references occur to Irish cloth
at Lübeck, as well as to Irish cloth and provisions along the Elbe, and
that the name he throws doubt on appears with good reason in my
text.
Mr. Dunlop also discovers a “most apparent and painful” instance
of my “distorting of evidence” in my reference (which I did not give
as a quotation) to Limerick merchants appeached of treason for
trading with Irish rebels, when the deputy’s words were victualling
and maintaining (p. 170). Mr. Dunlop might perhaps himself suspect
some barter in the business when it attracted eight merchants to
traffic in so dangerous an enterprise. But he conveniently omits the
rest of my story, that within a year of the arrest of the eight
merchants the Limerick corporation prayed to have the city charter
confirmed with a special clause that they might buy and sell with
Irishmen at all times. They seem to have had no objection to trade
with the Irish, which was the only point I had there to prove. I
willingly alter the word that seems to Mr. Dunlop so painful a
distortion of the truth, and my argument remains unchanged.
Mr. Dunlop twice condemns me in “the case of Enniscorthy fair,
where the documents referred to refute the deduction drawn from
them.” “We strongly resent her concealing the fact” that Sidney, with
the Four Masters, deplored the “destruction (n.b.)” of the fair by the
rebellious Butlers at the instigation of James Fitzmaurice. Why
should I not “conceal facts” I do not know to be true? I fancy it is
better than publishing them. The word used by the Four Masters,
Sidney, and a contemporary letter given in Hore’s Town of Wexford
(175) is “spoiling.” Will Mr. Dunlop give his references to “destruction
(n.b.),” and to “the instigation of James Fitzmaurice”? What is the
proof? This day’s raid was not the first attack on the fair after it had
been granted to English officers charged to execute martial law on
the Wexford Irish. I have not space to tell the significant
circumstances. Mr. Dunlop blames me for not giving the founder of
the fair. “We will overlook the omission,” he says in his lofty way of
superior erudition and fidelity to facts. This cheap taunt is surely
absolutely unworthy of a writer who should be aware that no one as
yet knows the origin of the fair. I see no reason against mentioning
its existence, among many others which Mr. Dunlop neglects, as
evidence of trading activity in a region where Irish law and speech
prevailed.
I do not propose to weary the reader by multiplying instances of
this kind. The details of historical controversy interest few readers.
Its personal aspect should interest none. The instances I have given
are true samples of all the rest. I have gone carefully through the
long indictment, and I note half a dozen minor points in which I am
glad to correct an obvious misprint or to amend an error (not one of
which, I would say, affects the drift of my argument). But the great
bulk of these criticisms—grave inaccuracies in themselves, or
misstatements of what I say, or dogmatic assertions which need for
their discussion evidences which there is no attempt to offer—can
give me little help. For an example of historical investigation of
medieval Irish history, of serious use of references and evidences, or
of customary fairness in discussion, I must go elsewhere than to Mr.
Dunlop.
With regard to evidence, I am charged with repudiating the
testimony of Spenser, Davies, Fynes Moryson, Cuellar, Derrick, and
official documents that tell against me. I have drawn very largely
from State Papers and official records of all kinds, sources of
information which have proved invaluable for my purpose. In the
shaking bog of medieval testimony, some firm standing is to be
found in statutes, ordinances, town records, cartularies, and the like.
From them we rapidly come to more perilous regions—State Papers
and letters—where every document needs to be considered as a
separate “source” to be separately discussed. Some were written by
strangers newly come to the country—soldiers, secretaries,
adventurers, spies; others by higher officials struggling in an intricate
tangle of intrigues, or by a lower sort trying to make their way
upwards; some by governors zealous to keep their credit amid the
scandal of the Court; others by governors desperate to recapture a
lost reputation. In the medley of partiality, prejudice, ignorance,
despair, and triumph, every one must judge to the best of his ability
as to the value of the testimony; there can be no scientific accuracy
in the measurement. There is the same difficulty with the reports of
a few Continental travellers, Italian or Spanish. Historians of Ireland
have freely used the evidence of men, English or European, who
came not knowing a word of the language, who traversed the
country more or less rapidly under official guidance, or in the midst
of armies occupied in a peculiarly ferocious warfare, or who
attempted an uneasy living on the confiscated lands of the “native”
people—men, in fact, who knew practically nothing but destruction.
From the study of other evidence I have come to think that the view
which has generally been accepted from these gentlemen is
imperfect and often erroneous. They could know nothing of an
earlier time and had but a partial vision of their own.
Some well-thumbed later authorities have been found to give no
trustworthy guidance for medieval Ireland, and they do not appear in
that customary place of authority which had become their recognised
privilege; on the other hand, some entirely new authorities have
been called in and some have lain unused.
Among the writers I am accused of neglecting is Captain Cuellar,
a Spaniard from the Armada, knowing no Irish, flying for his life,
sometimes among people who had no good reputation with the Irish
themselves, hiding himself in the wildest and most secret haunts of